2011-09-14 62 views
3

無法找到一些示例顯示如何使用Java允許用戶將圖像上載到Amazon S3。存儲在Amazon S3中的Java圖像上傳

的流程爲:

  1. 用戶與文件輸入表格元件的HTML形式。

  2. 該表單將所選圖像提交給Servlet。

  3. 該Servlet處理圖像並將其存儲在S3中。

任何人都知道任何好的鏈接/教程,大綱示例代碼來執行此操作?

回答

8

對於第三點:

  • jets3t
  • 它的教程很簡單。下面是我使用的一個片段:

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

對於前面兩點 - look at this question

+0

謝謝!我已經取得了一些進展,並且正在嘗試將對象放入S3中​​。該文件說「如果您的數據不是文件或字符串,您可以使用任何輸入流作爲數據源,但您必須手動設置內容長度。」我正在抓取上傳的圖像作爲InputStream。我不知道如何提取Content-Length來設置它:s3FileObject.setContentLength(contentLength);我已經嘗試將InputStream轉換爲String,然後獲取內容,但最終上傳的圖像已損壞。關於如何抓住內容的任何想法? – Stamford

+0

澄清,它實際上沒有設置內容長度的工作,只是給我一個警告。因此更好地弄清楚如何指定它:WARN [org.jets3t.service.impl.rest.httpclient.RestStorageService:1610]內容 - 未設置數據流的長度,將自動確定內存中的數據長度 – Stamford

+0

'Integer.parseInt (request.getHeader(「Content-Length」)應該給你 – Bozho

1

建議您使用html amazon API做到這一點。流媒體有點複雜,在大多數情況下你不需要它。

-1

您也可以使用一個簡單的表單將文件上傳到S3 Bucket。看下面這個例子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>