Пришлось выкопать старый 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 выше код в Promise для дополнительных вкусового. Встраивайте в Angular/REST, Express с шаблонами или другими средствами промежуточного программного обеспечения/презентации.
Обратите внимание: код, указанный выше, не ограничивает размер загружаемого файла. Это было бы сделано с другим условием, то есть для ограничения 50 МБ: ["content-length-range", 0, 52428800]
.