ngCordova FileTransfer直接上传到AWS S3 WebKitFormBoundary问题

时间:2016-07-11 15:57:14

标签: node.js cordova amazon-web-services amazon-s3 ionic-framework

我正在尝试使用带有ngCordova FileTransfer插件的AWS-S3上的预签名网址上传文件。

我已成功将文件上传到AWS-S3,但文件内容包含

------WebKitFormBoundarylCFgJXqqECF1rJ2m Content-Disposition: form-data; name="file"; filename="75cae09191bd92a16c3ff05baeb88b9b.jpg" Content-Type: image/jpeg

由于无法打开图像文件。 如何在我的文件中删除此标头。我有一个想法,如果我把二进制数据而不是表单数据,它将摆脱这个,因为我已经在POSTMAN中测试它,但无法在cordova文件传输中找到任何方法。

 $cordovaFileTransfer.upload(s3SignedUrl, imagePathOnPhone, {
                                fileKey: "file",
                                fileName: localFileName,
                                httpMethod: "PUT",
                                mimeType: 'image/jpeg'
                            })
                                .then(function (result) {
                                    console.log(result);

                                }, function (error) {
                                    console.log(error);

                                }, function (progress) {
                                    console.log(progress);

                                });

My Bucket在法兰克福地区和api v4。我在服务器上使用nodejs。

2 个答案:

答案 0 :(得分:1)

尝试将Content-Type属性添加到params部分。

$cordovaFileTransfer.upload(s3SignedUrl, imagePathOnPhone, {
    fileKey: "file",
    fileName: localFileName,
    httpMethod: "PUT",
    mimeType: 'image/jpeg',
    params: {
        "Content-Type": "image/jpeg"
    }
})
.then(function (result) {
    console.log(result);

}, function (error) {
    console.log(error);

}, function (progress) {
    console.log(progress);

});

答案 1 :(得分:0)

尝试将"Content-Type": "image/jpeg"添加到opts.headers以停用多部分:

$cordovaFileTransfer.upload(s3SignedUrl, imagePathOnPhone, {
    fileKey: "file",
    fileName: localFileName,
    httpMethod: "PUT",
    mimeType: 'image/jpeg',
    headers: {
        "Content-Type": "image/jpeg"
    }
})
.then(function (result) {
    console.log(result);
}, function (error) {
    console.log(error);
}, function (progress) {
    console.log(progress);
});