阿里雲對象存儲OSS(Object Storage Service)是阿里雲提供的海量、安全、低成本、高持久的雲存儲服務。html
官方文檔:點我傳送java
官方文檔:點我傳送安全
使用步驟:
併發
官方文檔:點我傳送app
建立目錄,更好的區分圖片存放的位置。也能夠直接放在建立的Bucket上。
dom
/** * 圖片上傳 Controller */ @RestController @RequestMapping("/images") public class ImagesController { @PostMapping("/upload") public void upload(@RequestParam("imageString") String imageString) throws UnsupportedEncodingException { String list = seafoodService.upload(imageString); } }
interface Serviceide
/** * 上傳圖片 service接口 */ public interface ISeafoodService { /** * 圖片上傳 * @author Hosystem * @create 2021-2-24 * @desc 圖片上傳 **/ String upload(String imageString) throws UnsupportedEncodingException; }
ServiceImplpost
/** * 上傳圖片 service */ @Service public class SeafoodServiceImpl implements ISeafoodService { /** * 阿里雲 OSS 配置抽取yml */ @Autowired AliPayClientProperties aliPayClientProperties; /** * 圖片上傳 * @author HYH * @create 2021-2-24 * @desc 圖片上傳 將圖片轉換成base64編碼而後傳進來 * * 參考文檔:https://help.aliyun.com/document_detail/84781.html?spm=a2c4g.11186623.2.10.e50c46a19Q1Q52 **/ @Override public String upload(String imageString) { // 建立OSSClient實例。 OSS ossClient = new OSSClientBuilder().build(appProps.getAliOssClientProperties().getEndpoint(), appProps.getAliOssClientProperties().getAccessKeyId(), appProps.getAliOssClientProperties().getAccessKeySecret()); // 建立一個Base64 對象 Base64 base64 = new Base64(); // 將傳進來的base64編碼 進行解碼 byte[] imageByte = base64.decode(imageString.toString()); // 建立字節流 將base64解碼後進行字節流轉換 ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(imageByte); // 上傳路徑 bucket目錄名 + 圖片的名稱 使用UUID隨機生成 // OSS管理控制檯將全部文件名以正斜線(/)結尾的文件顯示爲文件夾; // 如:abc/efg/123.jpg這個路徑的文件,在OSS管理控制檯上看起來就是123.jgp存放在abc文件夾下的efg子文件夾中。 // 若想上傳到bucket 則 String url = UUID.randomUUID().toString() + "." + "jpg"; String url = appProps.getAliOssClientProperties().getDirectoryPath() + UUID.randomUUID().toString() + "." + "jpg"; // 文件元信息(Object Meta):包括HTTP header和自定義元信息 // 建立上傳文件的元信息,能夠經過文件元信息設置HTTP header。 // 參考文檔:https://help.aliyun.com/document_detail/84840.html ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setContentType("image/jpg"); // 上傳文件 // 格式:ossClient.putObject("<yourBucketName>", "<yourObjectName>", new ByteArrayInputStream(content.getBytes()), meta); ossClient.putObject(appProps.getAliOssClientProperties().getBucketName(), url, byteArrayInputStream, objectMetadata); // 關閉OSSClient ossClient.shutdown(); // 返回上傳圖片的OSS路徑 return appProps.getAliOssClientProperties().getUrl() + url; } }
@Data @Component @Accessors(chain = true) @ConfigurationProperties(prefix = "aliOssClientProperties") public class AliOssClientProperties { /** * 阿里雲OSS endpoint */ private String endpoint; /** * 阿里雲OSS AccessKey */ private String accessKeyId; /** * 阿里雲OSS AccessKeySecret */ private String accessKeySecret; /** * 阿里雲OSS bucketName */ private String bucketName; /** * 阿里雲OSS url */ private String url; /** * 阿里雲OSS directoryPath 目錄路徑 */ private String directoryPath; }
# http://<bucket>.<endpoint>/<yourfile>+<yourdirectoryPath> aliOssClientProperties: endpoint: oss-cn-shenzhen.aliyuncs.com accessKeyId: #accessKey accessKeySecret: #accessKeySecret bucketName: #bucketName url: https://<bucketName>.<endpoint> directoryPath: images/
這裏我經過swagger進行測試,也能夠經過postman進行測試,直接定義常量imageString 看成參數使用。
測試
參考文檔1:點我傳送ui
參考文檔2:點我傳送
參考文檔3:點我傳送