我认为你想要的是使用POST的基于浏览器的上传。
基本上,您确实需要服务器端代码,但它所做的只是生成签名策略。客户端代码具有签名策略后,可以使用 POST 直接上传到 S3,而无需数据通过服务器。
这是官方文档链接:
图:http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html
示例代码:http://docs.aws.amazon.com/AmazonS3/latest/dev/HTTPPOSTExamples.html
签名的策略将以如下形式进入您的 html:
<html>
<head>
...
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
...
</head>
<body>
...
<form action="http://johnsmith.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
Key to upload: <input type="input" name="key" value="user/eric/" /><br />
<input type="hidden" name="acl" value="public-read" />
<input type="hidden" name="success_action_redirect" value="http://johnsmith.s3.amazonaws.com/successful_upload.html" />
Content-Type: <input type="input" name="Content-Type" value="image/jpeg" /><br />
<input type="hidden" name="x-amz-meta-uuid" value="14365123651274" />
Tags for File: <input type="input" name="x-amz-meta-tag" value="" /><br />
<input type="hidden" name="AWSAccessKeyId" value="AKIAIOSFODNN7EXAMPLE" />
<input type="hidden" name="Policy" value="POLICY" />
<input type="hidden" name="Signature" value="SIGNATURE" />
File: <input type="file" name="file" /> <br />
<!-- The elements after this will be ignored -->
<input type="submit" name="submit" value="Upload to Amazon S3" />
</form>
...
</html>
请注意,FORM 操作是将文件直接发送到 S3,而不是通过您的服务器。
每当您的某个用户想要上传文件时,您都会在服务器上创建 和。将页面返回到用户的浏览器。然后,用户可以将文件直接上传到 S3,而无需通过您的服务器。POLICY
SIGNATURE
对策略进行签名时,通常会使策略在几分钟后过期。这将强制您的用户在上传之前与您的服务器通信。这样,您就可以根据需要监控和限制上传。
进入或传出服务器的唯一数据是签名 URL。您的密钥在服务器上保持机密。