如何在没有AWS JavaScript SDK的情况下将文件上传到S3?

时间:2015-11-18 11:08:49

标签: javascript amazon-s3 xmlhttprequest

用于JavaScript的AWS开发工具包(即使只包含S3组件)对于我的webapp中的一些零星文件上传来说是一个巨大的体积。有没有更精简的方法可以直接从客户端的浏览器上传文件到S3存储桶,因为我有可以使用的存储桶名称accessKeyIdsecretAccessKey

3 个答案:

答案 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扩展程序)