背景:使用亚马逊S3上传文件,但是返回的文件URL连接有时效性,一旦超过时间就会返回错误Access Denied
修改文件有效性6天代码如下:
public static String uploadFileForSafe(MultipartFile file){
try{
String fileName = file.getOriginalFilename();
ObjectMetadata metadata = new ObjectMetadata();
metadata.setExpirationTime(DateUtils.str2date("2050-01-01 00:00:00", DatePatternEnum.yyyyMMddHHmmss));
PutObjectRequest objectRequest = new PutObjectRequest(safebucketName,fileName,file.getInputStream(),metadata);
objectRequest.getRequestClientOptions().setReadLimit(51200000);//设置大小限制50M
conn.putObject(objectRequest);
// 修改对象的访问控制权限
conn.setObjectAcl(safebucketName, fileName, CannedAccessControlList.PublicRead);
// 生成对象下载链接(带签名)
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(safebucketName, fileName);
request.setExpiration(DateUtils.getTodayDayAdd(6));//文件6天有效期
String path = conn.generatePresignedUrl(request).toString();
System.out.println("上传私密文件路径:"+path);
return path;
}catch (Exception e){
System.out.println(file.getName()+"上传私密文件失败!!!");
e.printStackTrace();
}
return null;
}
问题解决:
最后发现只有开放存储桶的权限,公有读私有写,然后通过拼接固定的存储桶的url+文件名来使URL一直访问有效。