亚马逊提供的S3服务入手还挺简单的,前一段时间搞得S3,今天同事告知上传到S3的图片URL失效,大概访问URL情况如下:
一通查找,以下链接跟我问题一样,不过其中提到的S3 settings文件找不到,也就不了了之,有知道的大神欢迎告知。
https://stackoverflow.com/questions/15853928/django-compressor-heroku-s3-request-has-expired
以下是我的解决办法:
/**
* @param @param tempFile 目标文件
* @param @param remoteFileName 文件名
* @param @return
* @param @throws IOException 设定文件
* @return String 返回类型
* @throws
* @Title: uploadToS3
* @Description: 将文件上传至S3上并且返回url
*/
public static String uploadToS3(File tempFile, String remoteFileName) throws IOException {
try {
//上传文件
s3.putObject(new PutObjectRequest(bucketName, remoteFileName, tempFile).withCannedAcl(CannedAccessControlList.PublicRead));
//设置过期时间 9700小时
java.util.Date expiration = new java.util.Date();
long expTimeMillis = expiration.getTime();
expTimeMillis += 1000L * 60 * 60 * 24 * 7;
expiration.setTime(expTimeMillis);
//获取一个request
GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(
bucketName, remoteFileName).withExpiration(expiration);
//生成公用的url
URL url = s3.generatePresignedUrl(urlRequest);
System.out.println("=========URL=================" + url + "============URL=============");
return url.toString();
} catch (AmazonServiceException ase) {
ase.printStackTrace();
} catch (AmazonClientException ace) {
ace.printStackTrace();
}
return null;
}
S3服务上传文件默认返回url过期时间为15分钟,通过设置过期时间,可以延迟到7天。
如果想url有效保存7天以上,请看下篇关于amazonaws中S3服务URL失效(Requests that are pre-signed by SigV4 algorithm are valid for at most )问题解决(下)
参考链接:
使用AWS SDK for Java生成预先签名的对象URL
转载请注明出处,谢谢