2011-01-25 35 views
3

我真的很困惑,當使用亞馬遜S3的關鍵價值應該是這裏是我的代碼。亞馬遜S3上傳什麼是關鍵做

<form action="http://bucket.s3.amazonaws.com" method="post" enctype="multipart/form-data"> 
<input type="text" name="key" value="{filename}" /> 
<input type="text" name="acl" value="public-read" /> 
<input type="text" name="content-type" value="text/plain" /> 
<input type="hidden" name="AWSAccessKeyId" value="Amazon Key" /> 
<input type="hidden" name="policy" value="ewogICJleHBpcmF0aW9uIjogIjIwMTItMDEtMDFUMTI6MDA6MDAuMDAwWiIsCiAgImNvbmRpdGlvbnMiOiBbCiAgICB7ImJ1Y2tldCI6ICJpcIHsiYWNsIjogInB1YmxpYy1yZWFkIiB9LAogICAgWyJlcSIsICIka2V5IiwgIntmaWxlbmFtZX0iXSwKICAgIFsic3RhcnRzLXdpdGgiLCAiJENvbnRlbnQtVHlwZSIsICJ0ZXh0LyJdLAogIF0KfQo=" /> 
<input type="hidden" name="signature" value="fGWi1jKU+hKZKbCIL1eD0=" /> 
<input name="file" type="file" /> 
<input name="submit" value="Upload" type="submit" /> 
</form> 

好了,所以我使用此服務生成我的政策等,因爲我還沒有得到一個線索如何手動做到這一點。

http://s3.amazonaws.com/doc/s3-example-code/post/post_sample.html

這工作,並給了我一切上傳。但是當我上傳我的文件時,他們總是調用{文件名},而不是實際文件名稱picture.jpg。我知道這是這條線。

<input type="text" name="key" value="{filename}" /> 

我希望它取消了我上傳的實際文件名的值。

我在做什麼錯誤很困惑。

我已經試過把它留空,但我得到這個錯誤。

InvalidArgumentUser鍵必須有一個 長度大於0

我希望它的工作這一點對我來說更大????

任何幫助,請

+0

我有類似的問題,我解決了它喜歡[此] [1] [1]:http://stackoverflow.com/a/17623622/2155074 – sanvj 2013-07-12 20:44:34

回答

1

你需要採取上傳的文件的名稱,並堅持在地方{文件名}

+0

您好我已經嘗試,使用<? php echo $ _FILES ['file'] ['name']; ?>但沒有顯示你會如何建議這樣做。 – iSimpleDesign 2011-01-25 13:55:14

0

參數「鑰匙」是在桶上傳的文件名。您可以放置​​不同的瀏覽文件名稱。

1

我之前沒有見過的東西是使用Amazon EC2 API提供的工具類。以下類包含獲取策略字符串和簽名的方法。這是,如果你不需要設置額外的元字段或存儲類有很大的輔助類:

com.amazonaws.services.ec2.util.S3UploadPolicy 
6

我知道你很久以前發佈了這個問題,但有人可能會有同樣的問題。

密鑰是您正在上傳的文件的名稱和路徑。

您可以在您的策略中設置關於密鑰的條件,比如它應該以什麼開始。$ {文件名}(你缺少$)

: 您可以通過使用值保留原文件名 保留原始文件名,但放在文件夾/文件/

形式:

<form action="http://yourbucketname.s3.amazonaws.com" method="post" enctype="multipart/form-data"> 
<input type="text" name="key" value="docs/${filename}" /> 
<input type="text" name="acl" value="public-read" /> 
<input type="text" name="content-type" value="text/plain" /> 
<input type="hidden" name="AWSAccessKeyId" value="<YourPublicKey>" /> 
<input type="hidden" name="policy" value="<Base64_encoded_your_policy>" /> 
<input type="hidden" name="signature" value="<HMAC SHA-1 of the policy>" /> 
<input name="file" type="file" /> 
<input name="submit" value="Upload" type="submit" /> 
</form> 

的政策,JSON

{"expiration": "2013-12-01T12:00:00.000Z", 
"conditions": [ 
{"acl": "public-read-write" }, 
{"bucket": "yourbucketname" }, 
["starts-with", "$key", "docs/"], 
["starts-with", "$Content-Type", "text/plain"], 
] 
} 

你需要做什麼:

0

它可能使用基於表單的HTML上傳:article做得很好,解釋它是如何可能的。在閱讀article之後,您可以使用下面提到的腳本來簡化生活。

這是一個用於生成我的策略,其簽名和base64字符串的python腳本。

IMP:確保policy.json文件在同一目錄

import base64 
import hmac, hashlib 
import os 
AWS_SECRET_ACCESS_KEY = 'Your Access Key' 

os.system('clear') 
print "This policy generator is for key : " + AWS_SECRET_ACCESS_KEY 
print "Make sure this is the correct key." 
print "IMP: Please be consistent with the file policy.json small changes in space or newline can fail policy" 

policy_document = file("policy.json",'rb').read() 
policy = base64.b64encode(policy_document) 
signature = base64.b64encode(hmac.new(AWS_SECRET_ACCESS_KEY, policy, hashlib.sha1).digest()) 

print 
print "Policy (BASE64_POLICY to be inserted in HTML):-" 
print policy 
print 
print "Signature:-" 
print signature 
print 

這裏是相應的policy.json文件我用:

{ 
    "expiration": "2014-01-01T00:00:00.00Z", 
    "conditions": [ 
    {"bucket": "BUCKET NAME" }, 
    ["starts-with", "$key", "PREFIX_IF_ANY"], 
    {"acl": "public-read" }, 
    {"success_action_redirect": "http://REDIRECTED_URL" }, 
    ["starts-with", "$Content-Type", "CONTENT_TYPE"], 
    ["content-length-range", 0, 1048576], 
    ] 
} 

此代碼的HTML表單是這樣的:

<html> 
    <head> 
     <title>S3 POST Form</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    </head> 

    <body> 
     <form action="http://BUCKET_NAME.s3.amazonaws.com/" method="post" enctype="multipart/form-data"> 
      <input type="hidden" name="key" value="picbum/${filename}"> 
      <input type="hidden" name="AWSAccessKeyId" value="AccessID"> 
      <input type="hidden" name="acl" value="public-read"> 
      <input type="hidden" name="success_action_redirect" value="http://REDIRECTED_URL"> 
      <!-- Fill these HTML fields with data generated from python script --> 
      <input type="hidden" name="policy" value='BASE64_POLICY'> 
      <input type="hidden" name="signature" value="SIGNATURE_GENERATED"> 
      <input type="hidden" name="Content-Type" value="CONTENT_TYPE"> 
      <!-- 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>