Amazon S3 GeneratePresignedUrlRequest - 新文件

时间:2016-01-04 21:06:24

标签: java amazon-s3 upload amazon

我想将一个新文件上传到Amazon s3到我的测试包。

这是java代码:

    AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
    java.util.Date expiration = new java.util.Date();
    long msec = expiration.getTime();
    msec += 1000 * 60 * 60; // Add 1 hour.
    expiration.setTime(msec);
    GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest("test-bucket", filename);
    generatePresignedUrlRequest.setMethod(HttpMethod.GET);
    generatePresignedUrlRequest.setExpiration(expiration);
    URL s = s3Client.generatePresignedUrl(generatePresignedUrlRequest);

但是我一直在接受:

"指定的密钥不存在。"对于文件名var。

如何使此代码适用于新文件?

2 个答案:

答案 0 :(得分:1)

从外观上看,GeneratePresignedUrlRequest适用于S3中的现有对象。

  

public GeneratePresignedUrlRequest(String bucketName,String key)

     

创建一个新请求,用于生成预签名URL,该URL可用作HTTP GET请求的一部分,以访问存储在指定存储桶中指定密钥下的Amazon S3对象。
  参数:
  bucketName - 包含所需Amazon S3对象的存储桶的名称   key - 存储所需Amazon S3对象的密钥。

您可以使用AmazonS3Client类中的putObject方法之一。

  

PutObjectResult putObject(PutObjectRequest putObjectRequest)
  将新对象上载到指定的Amazon S3存储桶。

     

PutObjectResult putObject(String bucketName,String key,File file)
  在指定的存储桶和密钥名称下将指定的文件上载到Amazon S3。

     

PutObjectResult putObject(String bucketName,String key,InputStream input,ObjectMetadata metadata)
  在指定的存储桶和密钥名称下将指定的输入流和对象元数据上载到Amazon S3。

将对象放入S3后,您可以使用该密钥实例化GeneratePresignedUrlRequest对象并获取URL。

答案 1 :(得分:0)

或者,您可以使用minio-java客户端库,其开源并与AWS S3 API兼容。

您可以查看PresignedPutObject.java示例。

import io.minio.MinioClient;
import io.minio.errors.MinioException;

import java.io.IOException;
import java.security.NoSuchAlgorithmException;
import java.security.InvalidKeyException;

import org.xmlpull.v1.XmlPullParserException;


public class PresignedPutObject {
  public static void main(String[] args)
    throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException, MinioException {
    // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are
    // dummy values, please replace them with original values.
    // Set s3 endpoint, region is calculated automatically
    MinioClient s3Client = new MinioClient("https://s3.amazonaws.com", "YOUR-ACCESSKEYID", "YOUR-SECRETACCESSKEY");

    String url = s3Client.presignedPutObject("my-bucketname", "my-objectname", 60 * 60 * 24);
    System.out.println(url);
  }
}

希望它有所帮助。

免责声明:我为Minio

工作