2017-03-18 938 views
1

This article显示如何使用表单将文件上传到Amazon S3或minio。我想使用预先签名的POST URL策略方法,因为它看起来是最安全的。如何将文件上传到使用javascript的浏览器到Minio或S3的预签名POST URL?

但是,我希望使用浏览器以编程方式上传文件到minio或S3。换句话说,我想使用JavaScript,而不是表单。

我是一个节点用户,熟悉superagent,使用.field().attach()操作来设置表单域并上传文件非常简单。

此作品在节点:

let cdnAgent = superagent; 
    let req = cdnAgent.post(r.data.pictureSet.uploadLink); 
    _.each(uploadForm, function(value, key) { 
    req.field(key, value); 
    }); 
    // upload file via the created signed policy 
    return req 
    .set('Content-Type', 'application/octet-stream') 
    .attach('file', 'test/data/test.jpg'); 
}).then(r => { 

然而,这并不在浏览器中运行,.attach()不支持,当我工作围绕这一点,我因为我的JavaScript域是一个独立的跑进CORS问题域名从我的迷你或S3域。

为了回答这个问题,我希望看到一个使用XMLHttpRequest,Axios,superagent或Fetch的完整示例,它可以跨域使用。

我注意到有一些类似的问题,这个和一些答案,但他们都显得非常过时,技术已经开始。所以我不认为这是一个重复的问题。

+1

铲斗支撑[定制CORS响应(http://docs.aws.amazon.com/AmazonS3/latest/dev/cors。 html),所以你应该能够解决这个问题的一部分。 –

+0

在minio上默认使用CORS,这是我测试的目的。但是,感谢亚马逊CORS链接,我可能会在某个时候需要。 –

+0

对不起,我的大脑中有S3,完全掩盖了多次提及minio的情况。 –

回答

1

https://github.com/harshavardhana/minio-js-browser-upload/你可以简单地复制这个回购协议,然后在http://localhost:8080运行

node presign-post-server.js 

访问浏览器。点击上传文件,只需上传选定的文件将通过预定的邮政政策风格上传。 [1]

目前的例子只是指向https://play.minio.io:9000uploads桶。 [2]

[1] https://github.com/harshavardhana/minio-js-browser-upload/blob/master/index-post.html

[2] https://github.com/harshavardhana/minio-js-browser-upload/blob/master/presign-post-server.js

+0

工作的例子,爱它!现在把它打包在一个docker镜像中:-)。但非常感谢,这是一个规范的XMLHttpRequest示例。 SuperAgent在OP中的评论中回答。现在有人只需要发布Axios的答案,下一个noob会更好... –

相关问题