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。