File upload AmazonS3上传密钥做什么

File upload AmazonS3上传密钥做什么,file-upload,amazon-s3,File Upload,Amazon S3,我真的很困惑,当使用AmazonS3时,键值应该是什么。这里是我的代码 <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" /&g

我真的很困惑,当使用AmazonS3时,键值应该是什么。这里是我的代码

   <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>

好的,所以我使用这个服务来生成我的策略等,因为我不知道如何手动执行

这工作,并给我一切上传。但是当我上传文件时,它们总是被称为{filename},而不是实际的文件名picture.jpg。我知道这是底线

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

我希望它从我上传的文件名中去掉这个值

我做错了什么?我很困惑

我试着把它留空,但我得到了这个错误

InvalidArgumentUser密钥必须具有 长度大于0

我想让它为我解决这个问题


请提供任何帮助

您需要获取上传文件的名称,并将其粘贴在{filename}的位置

参数“key”是bucket中上传文件的名称。您可以为浏览过的文件设置不同的名称。

我之前没有提到的一点是使用AmazonEC2API提供的实用程序类。下面的类包含获取策略字符串和签名的方法。如果您不需要设置额外的元字段或存储类,这是一个很好的帮助器类:

com.amazonaws.services.ec2.util.S3UploadPolicy

您只是在{filename}位前面缺少一个$符号。应该是:

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

有关更多信息,请参阅。

我知道您很久以前就发布了此问题,但可能有人有相同的问题

是要上载的文件的名称和路径

您可以在策略中设置有关密钥的条件,例如密钥应该从什么开始。 您可以使用以下值保留原始文件名:${filename}(您缺少$)

示例: 保留原始文件名,但放入文件夹/文档中/

表格:

<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>
您需要做的是:

  • 在for action和Policy Json中替换Yourbucketname
  • 对策略进行编码
  • 以策略值的形式设置策略
  • 在表单中替换您的
  • 使用您的密码对编码策略进行签名
  • 在表单签名值中设置签名

使用基于表单的HTML上传是可能的:这很好地解释了它是如何实现的。阅读后,你可以使用我下面提到的脚本,使生活更轻松

下面是一个python脚本,用于生成策略、其签名和base64字符串

IMP:确保policy.json文件位于同一目录中

下面是我使用的相应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>

S3邮政表格
要上载到S3的文件:


您好,我尝试过使用,但没有显示您建议如何操作。我遇到了类似的问题,我像[此][1][1]一样解决了它:
{
  "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> 
    <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>