首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从摩卡/超级代理测试CORS上传到amazon-s3的呼叫?

如何从摩卡/超级代理测试CORS上传到amazon-s3的呼叫?
EN

Stack Overflow用户
提问于 2014-01-30 17:56:23
回答 1查看 1.5K关注 0票数 3

我在尝试从超级代理到亚马逊S3上传文件的CORS请求时遇到了问题。首先,我向node.js服务器请求策略。我返回如下的JSON对象:

代码语言:javascript
复制
{
    s3PolicyBase64: '',
    s3Signature: '',
    s3Key: '',
    s3ObjectKey: 'ftriana3185/inputData/input_fdc2f7f4b050c5884e5ac60a43bfc0d8ff26d549.csv' }

然后,我尝试从超级代理中使用节点返回的策略上传本地文件。我的代码如下所示:

代码语言:javascript
复制
it('GET /inputFiles/s3Credential', function(done) {
    var csvPath = './files/inputFileResource/countrylist.csv';
    var request = {};
    request.ext = 'csv';

    clientAgent.get(localPath + '/inputFiles/s3Credential').send(request).end(function(response) {
        var s3PolicyBase64 = response.body.s3PolicyBase64;
        var s3Signature = response.body.s3Signature;
        var s3Key = response.body.s3Key;
        var s3ObjectKey = response.body.s3ObjectKey;

        var request = clientAgent.post('bucket-name.s3.amazonaws.com')
            .type('form')
            .field('key', s3ObjectKey)
            .field('AWSAccessKeyId', s3Key)
            .field('acl', 'public-read')
            .field('policy', s3PolicyBase64)
            .field('signature', s3Signature)
            .attach('mycsv', csvPath).end(function(response){
                console.log(response);
            });
    });
});

我确信问题在于我正在执行来自超级代理的请求的形式,因为我也有一个工作良好的html表单。那么,为了这个目的使用超级代理的正确形式是什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-13 19:36:59

我今天试着这么做,发现HTTP 400失败了。我猜超级代理不尊重http://aws.amazon.com/articles/1434中描述的精确的表单布局。

我建议您使用“表单数据”模块(https://github.com/felixge/node-form-data)。

这对我起了作用:

代码语言:javascript
复制
var FormData = require('form-data');
var fs = require('fs');

...

it('should upload to S3 with a multipart form', function (done) {
    var policy = {/* your S3 policy */};
    var form = new FormData();
    form.append('AWSAccessKeyId', policy.AWSAccessKeyId);
    form.append('key', policy.key);
    form.append('policy', policy.policy);
    form.append('signature', policy.signature);
    form.append('file', fs.createReadStream('path/to/file'));
    form.submit('https://YOUR_BUCKET.s3.amazonaws.com/', function (err, res) {
        if (err) return done(err);
        res.statusCode.should.be.exactly(204);
        done();
    });
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21464000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档