Amazon S3 Glacier文件上傳
官方文檔:
https://docs.aws.amazon.com/zh_cn/amazonglacier/latest/dev/introduction.html
https://docs.aws.amazon.com/zh_cn/sdk-for-java/v2/developer-guide/setup-install.html
1.下載demo
(本文中的上傳類並未使用demo中的代碼,demo僅供參考)
https://github.com/awslabs/aws-java-sample.git
打開demo查看README.txt
這裏說明一下,這是aws oss 上傳文件的安全憑證,可在aws控制檯獲取參數值,創建的目錄爲:
~/.aws/credentials on Linux, macOS, or Unix
C:\Users\USERNAME.aws\credentials on Windows
具體可參考:https://blog.csdn.net/weixin_30733003/article/details/95404897
注意,linux下 .aws 是隱藏文件,使用ls -a可查看包括隱藏文件在內的所有文件
2.引入依賴
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.9.6</version>
</dependency>
3.上傳類代碼如下
需要準備的還有bucketName和Regions,均可在AWS控制檯獲取
/**
* 圖片處理
* @author sxd
* @date 2020/6/17 10:50
*/
@Controller
@RequestMapping("/picture")
public class PictureController {
private static final Logger log = LoggerFactory.getLogger(CommonController.class);
public static String bucketName = "beta-china-game";
public static AmazonGlacierClient client;
/**
* AWS OSS 圖片上傳
* */
@PostMapping("/awsUpload")
@ResponseBody
public AjaxResult awsUpload(@RequestParam("filePic") MultipartFile filePic) {
try
{
// 上傳並返回新文件名稱
log.info("開始上傳文件");
File fileFile = multipartFileToFile(filePic);
//獲取文件名
String remoteFileName = "game-pic-" + fileFile.getName();
// 開始上傳
String pictureAwsUrl = upload(fileFile, remoteFileName);
//上傳成功
if (pictureAwsUrl != null) {
// AWS默認文件鏈接有效期爲15分鐘,爲保證鏈接長期有效,只保留?前面的部分
String pictureAwsUrlDeal = pictureAwsUrl.substring(0, pictureAwsUrl.indexOf("?"));
AjaxResult ajax = AjaxResult.success();
ajax.put("fileName", fileFile.getName());
ajax.put("url", pictureAwsUrlDeal);
return ajax;
} else {
return AjaxResult.error("上傳失敗!請稍後重試!");
}
}
catch (Exception e)
{
return AjaxResult.error(e.getMessage());
}
}
public String upload(File pic, String remoteFileName) throws IOException {
try {
AmazonS3 s3 = new AmazonS3Client();
Region usWest2 = Region.getRegion(Regions.AP_NORTHEAST_1);
s3.setRegion(usWest2);
s3.putObject(new PutObjectRequest(bucketName, remoteFileName, pic)
.withCannedAcl(CannedAccessControlList.PublicRead));
GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucketName, remoteFileName);
URL url = s3.generatePresignedUrl(urlRequest);
return url.toString();
} catch (AmazonServiceException ase) {
ase.printStackTrace();
} catch (AmazonClientException ace) {
ace.printStackTrace();
}
return null;
}
/**
* MultipartFile文件類型轉化爲File類型
* */
public static File multipartFileToFile(MultipartFile multiFile) {
// 獲取文件名
String fileName = multiFile.getOriginalFilename();
// 獲取文件後綴
String prefix = fileName.substring(fileName.lastIndexOf("."));
// 若需要防止生成的臨時文件重複,可以在文件名後添加隨機碼
try {
File file = File.createTempFile(fileName, prefix);
multiFile.transferTo(file);
return file;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}