关于amazonaws中S3服务URL失效(Request has expired)问题解决(上)

亚马逊提供的S3服务入手还挺简单的,前一段时间搞得S3,今天同事告知上传到S3的图片URL失效,大概访问URL情况如下:

关于amazonaws中S3服务URL失效(Request has expired)问题解决(上)_第1张图片

一通查找,以下链接跟我问题一样,不过其中提到的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

 

转载请注明出处,谢谢

你可能感兴趣的:(aws,S3)