发现在Heroku书面记录上载至私人S3桶,直接从浏览器:浏览器直接上传到S3,准系统的Node.js
https://devcenter.heroku.com/articles/s3-upload-node
对我来说,AWS-SDK包的方式得到不仅仅是它的帮助。可疑的s3upload脚本是另一个问题。
如何不直接上传到s3而不用所有的方式?
发现在Heroku书面记录上载至私人S3桶,直接从浏览器:浏览器直接上传到S3,准系统的Node.js
https://devcenter.heroku.com/articles/s3-upload-node
对我来说,AWS-SDK包的方式得到不仅仅是它的帮助。可疑的s3upload脚本是另一个问题。
如何不直接上传到s3而不用所有的方式?
不得不挖掘一个旧的基于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
,下方encodedPolicy
和signature
变量的值。请记住,这两个值必须是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]
。