Aliyun Oss 上傳文件

Aliyun OSS

OSS 簡介

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

OSS 基本概念

官方文檔:點我傳送java

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

OSS 功能概述

官方文檔:點我傳送安全

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

OSS 使用

使用步驟:
p203792.jpg併發

建立存儲空間Bucket

官方文檔:點我傳送app

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

建立子目錄

建立目錄,更好的區分圖片存放的位置。也能夠直接放在建立的Bucket上。
2BADC1E0-B481-4880-912C-B007F4C462E4.pngdom

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 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;
    }
    
}
  • 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:點我傳送ui

參考文檔2:點我傳送

參考文檔3:點我傳送

相關文章
相關標籤/搜索