【问题标题】:Java image upload stored in Amazon S3存储在 Amazon S3 中的 Java 图像上传
【发布时间】:2011-11-17 08:31:49
【问题描述】:

找不到一些示例来展示我如何使用 Java 允许用户将图像上传到 Amazon S3。

流程是:

  1. 用户使用带有文件输入表单元素的 HTML 表单。

  2. 此表单将所选图像提交给 Servlet。

  3. 此 Servlet 处理图像并将其存储在 S3 中。

任何人都知道概述示例代码以执行此操作的任何好的链接/教程吗?

【问题讨论】:

    标签: java amazon-s3 amazon


    【解决方案1】:

    第三点:

    • jets3t
    • 教程很简单。这是我正在使用的 sn-p:

      S3Object fileObject = new S3Object(path);
      fileObject.setDataInputStream(is);
      s3service.putObject(bucketName, fileObject);
      

    对于前两点——look at this question

    【讨论】:

    • 谢谢!我已经取得了一些进展,并且正试图将对象放入 S3 中。文档说“如果您的数据不是文件或字符串,您可以使用任何输入流作为数据源,但您必须手动设置 Content-Length。”我将上传的图像作为 InputStream 抓取。我不确定如何提取 Content-Length 以在此处设置: s3FileObject.setContentLength(contentLength);我尝试将 InputStream 转换为字符串,然后获取内容长度,但生成的上传图像已损坏。关于如何获取内容长度的任何想法?
    • 澄清一下,它实际上可以在不设置内容长度的情况下工作,只是给我一个警告。所以最好弄清楚如何指定它:WARN [org.jets3t.service.impl.rest.httpclient.RestStorageService:1610] Content-Length of data stream not set, will automatically determine data length in memory
    • Integer.parseInt(request.getHeader("Content-Length") 应该给你这个
    【解决方案2】:

    建议您使用html amazon API 来执行此操作。流媒体有点复杂,在大多数情况下您不需要它。

    【讨论】:

      【解决方案3】:

      您还可以使用简单的表单将文件上传到 S3 存储桶。看这个例子http://aws.amazon.com/articles/1434

      示例形式:

      <html> 
        <head>
          <title>S3 POST Form</title> 
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        </head>
      
        <body> 
          <form action="https://s3-bucket.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
            <input type="hidden" name="key" value="uploads/${filename}">
            <input type="hidden" name="AWSAccessKeyId" value="YOUR_AWS_ACCESS_KEY"> 
            <input type="hidden" name="acl" value="private"> 
            <input type="hidden" name="success_action_redirect" value="http://localhost/">
            <input type="hidden" name="policy" value="YOUR_POLICY_DOCUMENT_BASE64_ENCODED">
            <input type="hidden" name="signature" value="YOUR_CALCULATED_SIGNATURE">
            <input type="hidden" name="Content-Type" value="image/jpeg">
            <!-- Include any additional input fields here -->
      
            File to upload to S3: 
            <input name="file" type="file"> 
            <br> 
            <input type="submit" value="Upload File to S3"> 
          </form> 
        </body>
      </html>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-20
        • 2015-04-17
        • 1970-01-01
        • 1970-01-01
        • 2023-02-04
        • 1970-01-01
        相关资源
        最近更新 更多