Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 直接将blob上载到s3时遇到问题_Javascript_Html_Amazon S3 - Fatal编程技术网

Javascript 直接将blob上载到s3时遇到问题

Javascript 直接将blob上载到s3时遇到问题,javascript,html,amazon-s3,Javascript,Html,Amazon S3,我有以下代码: var fd = new FormData(); var key = "events/" + (new Date).getTime() + '-'; fd.append('key', key); fd.append('acl', Acl); fd.append('Content-Type', "image/jpeg"); fd.append('AWSAccessKeyId', AWSAccessK

我有以下代码:

var fd = new FormData();

        var key = "events/" + (new Date).getTime() + '-';

        fd.append('key', key);
        fd.append('acl', Acl);
        fd.append('Content-Type', "image/jpeg");
        fd.append('AWSAccessKeyId', AWSAccessKeyId);
        fd.append('policy', Policy);
        fd.append('name', "Policy13492345");
        fd.append('success_action_status', "201");
        fd.append('signature', Signature);          
        fd.append("file",  blob);
        fd.append("filename", fileName + ".jpg");
        var xhr = new XMLHttpRequest();



        xhr.upload.addEventListener("progress", uploadProgress, false);
        xhr.addEventListener("load", uploadComplete, false);
        xhr.addEventListener("error", uploadFailed, false);
        xhr.addEventListener("abort", uploadCanceled, false);

        xhr.open('POST', 'https://s3.amazonaws.com/' + Bucket + '/', true); 

        xhr.send(fd);
当此请求通过时,我得到以下错误:

AccessDenied
根据策略无效:策略条件失败:[“以“,$Filename”开头,“”]

我不知道我做错了什么,我生成的blob如下:

function dataURItoBlob(dataURI) {
                var binary = atob(dataURI.split(',')[1]);
                var array = [];
                for (var i = 0; i < binary.length; i++) {
                    array.push(binary.charCodeAt(i));
                }
                var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]
                return new Blob([new Uint8Array(array)], { type: mimeString });
            }

解决了这个问题,formdata的顺序很重要,您必须遵循正确的顺序才能正确发布数据。

From-文件应该是表单中的最后一个元素。我花了一段时间才找到这份文件。这里是…我使用blueimp jQuery文件上传,并将一个裁剪过的图像直接上传到s3。在“添加”事件中,我将一个文件属性附加到formData中data.formData={acl:'public read',AWSAccessKeyId:res.s3Key,key:IMAGE\u PATH,policy:res.s3PolicyBase64,signature:res.s3Signature,file:data.files[0]}```
------WebKitFormBoundaryxh8thnHAmDhZQuXE
Content-Disposition: form-data; name="key"

events/1367541109750-
------WebKitFormBoundaryxh8thnHAmDhZQuXE
Content-Disposition: form-data; name="acl"

private
------WebKitFormBoundaryxh8thnHAmDhZQuXE
Content-Disposition: form-data; name="Content-Type"

image/jpeg
------WebKitFormBoundaryxh8thnHAmDhZQuXE
Content-Disposition: form-data; name="AWSAccessKeyId"

asdfasdfFASDFSDFAADSFHHVDQ
------WebKitFormBoundaryxh8thnHAmDhZQuXE
Content-Disposition: form-data; name="policy"

FsnY29udFuZ2UnLCAwLCAxMDAwMDAwMDBdLAogICAgICasdfasdfAgIFsgJ3N0YXJ0cy13aXRoJywgJyRrZXknLCAnJyBdLAogICAgICAgIFsgJ3N0YXJ0cy13aXRoJywgJyRDb250ZW50LVR5cGUnLCAnasdfJyBdLAo
------WebKitFormBoundaryxh8thnHAmDhZQuXE
Content-Disposition: form-data; name="name"

Policy134722343242345
------WebKitFormBoundaryxh8thnHAmDhZQuXE
Content-Disposition: form-data; name="success_action_status"

201
------WebKitFormBoundaryxh8thnHAmDhZQuXE
Content-Disposition: form-data; name="signature"

basdfasdftwa/9asdfasdfx3/zasdfadsft6g=
------WebKitFormBoundaryxh8thnHAmDhZQuXE
Content-Disposition: form-data; name="file"; filename="blob"
Content-Type: image/jpeg


------WebKitFormBoundaryxh8thnHAmDhZQuXE
Content-Disposition: form-data; name="filename"

C:\fakepath\495845894.jpg
------WebKitFormBoundaryxh8thnHAmDhZQuXE--