【问题标题】:Amazon S3 GeneratePresignedUrlRequest - new fileAmazon S3 GeneratePresignedUrlRequest - 新文件
【发布时间】:2016-01-04 21:06:23
【问题描述】:

我想将一个新文件上传到 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。

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

【问题讨论】:

    标签: java amazon-s3 upload amazon


    【解决方案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。

    【讨论】:

    • 这里的参数键是什么?如何生成密钥?
    【解决方案2】:

    您也可以使用minio-java 客户端库,它是开源的并且与AWS S3 API 兼容。

    您可以查看PresignedPutObject.java 的相同示例。

    导入 io.minio.MinioClient; 导入 io.minio.errors.MinioException; 导入 java.io.IOException; 导入 java.security.NoSuchAlgorithmException; 导入 java.security.InvalidKeyException; 导入 org.xmlpull.v1.XmlPullParserException; 公共类 PresignedPutObject { 公共静态无效主要(字符串 [] 参数) 抛出 NoSuchAlgorithmException、IOException、InvalidKeyException、XmlPullParserException、MinioException { // 注意:YOUR-ACCESSKEYID、YOUR-SECRETACCESSKEY 和 my-bucketname 是 // 虚拟值,请用原始值替换它们。 // 设置s3端点,自动计算区域 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工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      相关资源
      最近更新 更多