Aliyun Oss 上傳文件

Aliyun OSS

OSS 簡介

阿里雲對象存儲OSS(Object Storage Service)是阿里雲提供的海量、安全、低成本、高持久的雲存儲服務。

OSS 基本概念

官方文檔:點我傳送

  • 存儲空間(Bucket)
  • 對象(Object)
  • ObjectKey
  • Region(地域)
  • Endpoint(訪問域名)
  • AccessKey(訪問密鑰)

OSS 功能概述

官方文檔:點我傳送

  • 創建存儲空間
  • 上傳文件
    • 簡單上傳: 包括流式上傳和文件上傳。最大不能超過5GB。
    • 表單上傳: 最大不能超過5GB。
    • 追加上傳: 最大不能超過5GB。
    • 斷點續傳上傳: 支持併發、斷點續傳、自定義分片大小。大文件上傳推薦使用斷點續傳。最大不能超過48.8TB。
    • 分片上傳: 當文件較大時,可以使用分片上傳,最大不能超過48.8TB。
  • 下載文件

OSS 使用

使用步驟:
p203792.jpg

創建存儲空間Bucket

官方文檔:點我傳送

40F06D90-71F6-4e46-AC2F-4B5E8C718676.png

創建子目錄

創建目錄,更好的區分圖片存放的位置。也可以直接放在創建的Bucket上。
2BADC1E0-B481-4880-912C-B007F4C462E4.png

Java編碼

  • controller 層
/**
 * 圖片上傳 Controller
 */
@RestController
@RequestMapping("/images")
public class ImagesController {

    @PostMapping("/upload")
    public void upload(@RequestParam("imageString") String imageString) throws UnsupportedEncodingException {
        String list = seafoodService.upload(imageString);
    }
    
}
  • Service層

interface Service

/**
 * 上傳圖片 service接口
 */
public interface ISeafoodService {

    /**
     * 圖片上傳
     * @author Hosystem
     * @create 2021-2-24
     * @desc 圖片上傳
     **/
    String upload(String imageString) throws UnsupportedEncodingException;
}

ServiceImpl

/**
 * 上傳圖片 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;
    }
    
}
  • yml配置抽取
@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;
}
  • yml配置
  # 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 當作參數使用。
E0227E46-3158-483e-ABAE-11572DDCEB6E.png

參考文檔1:點我傳送

參考文檔2:點我傳送

參考文檔3:點我傳送

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章