2014-12-02 111 views

回答

1

不得不挖掘一个旧的基于Java的项目来找出这一个。事实证明,这一切都很好,很简单。首先,建立一个快速的HTML表单做上传:

<form action="https://BUCKETNAME.s3.amazonaws.com/" 
     method="post" 
     enctype="multipart/form-data"> 
    <input type="hidden" name="key" value="KEY"></input> 
    <input type="hidden" name="AWSAccessKeyId" value="ACCESS_KEY"></input> 
    <input type="hidden" name="policy" value="POLICY"></input> 
    <input type="hidden" name="signature" value="SIGNATURE"></input> 
    <input type='file' name='file'> 
    <input type='submit' value='Upload Driver Photo'> 
</form> 

接下来,煮了一个快速的Node.js脚本生成POLICY及以上SIGNATURE,下方encodedPolicysignature变量的值。请记住,这两个值必须是base64编码:

var crypto=require("crypto"), 
    bucketName="BUCKETNAME", 
    secretKey="SECRET_KEY", 
    s3Key="KEY", 
    expiration= new Date(); 
expiration.setDate(expiration.getDate()+1); 
var policy={ 
    expiration:expiration.toISOString(), 
    conditions:[ 
    {bucket:bucketName}, 
    {key:s3Key} 
    ] 
}, 
    encodedPolicy=new Buffer(JSON.stringify(policy)).toString("base64"), 
    signature=crypto.createHmac(
    "sha1", secretKey 
).update(encodedPolicy).digest("base64"); 

裹Node.js的上面的代码中承诺额外的鲜味。嵌入Angular/REST,Express模板,或其他选择的中间件/演示框架。

请注意:上面的代码并不限制上传文件的大小。这将在另一个条件下完成,即对于50MB限制:["content-length-range", 0, 52428800]

1

,你可以做到这一点使用minio-js如图所示example

在服务器上得到presigned URL像这样PUT:

var presignedUrl = s3Client.presignedPutObject('my-bucketname', 'my-objectname', 1000, function(e, presignedUrl) { 
    if (e) return console.log(e) 
    console.log(presignedUrl) 
}) 

在浏览器中使用这个presignedUrl做一个简单的PUT请求到S3上传一个对象。