用于JavaScript
的AWS开发工具包(即使只包含S3
组件)对于我的webapp中的一些零星文件上传来说是一个巨大的体积。有没有更精简的方法可以直接从客户端的浏览器上传文件到S3存储桶,因为我有可以使用的存储桶名称accessKeyId
和secretAccessKey
?
答案 0 :(得分:3)
要将文件从浏览器上传到S3,您可以使用预先签名的PUT。这样您就不会向浏览器公开aws的秘密。您可以使用minio-js库生成预先签名的PUT URL。
在服务器端,您可以像这样生成预先签名的PUT URL:
var Minio = require('minio')
// find out your s3 end point here:
// http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
var s3Client = new Minio({
url: 'https://<your-s3-endpoint>',
accessKey: 'YOUR-ACCESSKEYID',
secretKey: 'YOUR-SECRETACCESSKEY'
})
var presignedUrl = s3Client.presignedPutObject('bucket', 'object', 24*60*60)
// presignedUrl expires in 1 day
您可以将此预先签名的URL传递给浏览器,该浏览器只需对亚马逊s3执行简单的HTTP PUT即可。 PUT请求将成功,因为签名将是presignedUrl的一部分。
您也可以使用预先签名的POST进行上传。 Presigned POST可以更好地控制上传 - 比如你可以限制上传对象的大小,内容类型等。
答案 1 :(得分:1)
S3支持使用表单上传从浏览器上传,浏览器不需要特殊代码。它涉及表单的特定设计和签名的策略文档,允许用户仅上载符合您施加的约束的文件,并且不会公开您的密钥。在上传后,它还可以选择将浏览器重定向回您的网站。
http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html
答案 2 :(得分:-1)
尝试使用Extended S3 Browser(Chrome扩展程序)