OSS 文件上傳(阿里雲對象存儲空間)


 

文件上傳

此文件上傳可上傳各類常規的文件對象,例如:圖片的png/jpg/gif、視頻的MP4/MOV、文檔文件等,基本上都可以通過這個方法上傳;

1、官方文檔:

簡單上傳:分為流式上傳和文件上傳。流式上傳使用InputStream作為文件的數據源。文件上傳使用本地文件作為OSS文件的數據源。

https://help.aliyun.com/document_detail/84781.html?spm=a2c4g.11174283.6.944.21967da2h9PbDz

上傳形式還有:表單上傳、斷點上傳、分片上傳等,文檔都在路徑中可找到;


 

2、jar包:

阿里雲官方依賴包(看着就那么幾個,其實里面東西不少,文件上傳中真正用的也不算多)

https://gosspublic.alicdn.com/AliyunJavaSDK/3.10.2/javadoc/index.html?spm=a2c4g.11186623.2.11.160c6592adkTzv

第三步的代碼中使用得到的主要有這么幾個,這些只是那幾個jar包中的幾個子類:

import com.aliyun.oss.HttpMethod;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;

 


3、同步上傳代碼:

// OSS所在服務區地址(在所購買的OSS存儲對象空間信息中會有,一般也就是杭州的)
private static String endpoint="https://oss-cn-hangzhou.aliyuncs.com";
// OSS對象存儲空間訪問身份驗證賬戶和密鑰
private static String accessKeyId="*************";
private static String accessKeySecret="********************";
// OSS對象存儲空間名
private static String bucketName="*********************";
// OSS存儲空間中的文件目錄
private static String fileDir = "***/***/";

private OSSClient ossClient;

public OSSUpload1() {
        ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    }

/**
 * @Author qtl
 * @Description 同步上傳
 * @Date 18:31 2020/10/14
 * @Param [file]
 * @return java.lang.String
 **/
public String uploadImg2Oss(MultipartFile file) {
    // 獲取文件名
    String originalFilename = file.getOriginalFilename();
    String substring = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
    Random random = new Random();
    String name = random.nextInt(10000) + System.currentTimeMillis() + substring;
    try {
        InputStream inputStream = file.getInputStream();
        this.uploadFile2OSS(inputStream, name);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return name;
}

/**
 * @Author qtl
 * @Description 上傳到OSS服務器 如果同名文件會覆蓋服務器上的,因此在文件命名上采用時間戳(毫秒級)來命名上傳成功的文件
 * @Date 10:55 2020/9/16
 * @Param [instream, fileName]
 * @return java.lang.String
 **/
public String uploadFile2OSS(InputStream instream, String fileName) {
    String ret = "";
    try {
        // 創建上傳Object的Metadata
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setContentLength(instream.available());
        objectMetadata.setCacheControl("no-cache");
        objectMetadata.setHeader("Pragma", "no-cache");

        objectMetadata.setContentType(getContentType(fileName.substring(fileName.lastIndexOf("."))));
        objectMetadata.setContentDisposition("inline;filename=" + fileName);
        // 上傳文件
        PutObjectResult putResult = ossClient.putObject(bucketName, fileDir + fileName, instream, objectMetadata);
        ret = putResult.getETag();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (instream != null) {
                instream.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  // 這個返回值就是上傳成功后在OSS文件對象存儲的文件名【例:1607605931087.jpg】
    return ret;
}

上面的代碼使用的是本地文件上傳的形式,在使用此代碼時需要有兩個條件:

  1、開通OSS服務

  2、創建存儲空間(文件存儲路徑其實也可以不用創建,直接在代碼中寫上路徑,在上傳過程中如果發現沒有此目錄就會自動創建);

  3、創建AccessKey


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM