Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.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
Amazon web services 如何修复S3上传的冲突查询字符串参数?_Amazon Web Services_Amazon S3_React Native - Fatal编程技术网

Amazon web services 如何修复S3上传的冲突查询字符串参数?

Amazon web services 如何修复S3上传的冲突查询字符串参数?,amazon-web-services,amazon-s3,react-native,Amazon Web Services,Amazon S3,React Native,我正在尝试在react本机应用程序的上下文中将原始图像数据上载到S3 我的原始数据是正确的,我认为我在react native中的代码在很大程度上能够正确地捕获图像数据 在我的rails服务器上,我使用AmazonRubyGem构建url的详细信息和将数据发布到相关bucket所需的相关身份验证数据,然后将其呈现为react native,就像常规react web前端一样 # inside the rails server controller s3_data = S3_BUCKET.pres

我正在尝试在react本机应用程序的上下文中将原始图像数据上载到S3

我的原始数据是正确的,我认为我在react native中的代码在很大程度上能够正确地捕获图像数据

在我的rails服务器上,我使用AmazonRubyGem构建url的详细信息和将数据发布到相关bucket所需的相关身份验证数据,然后将其呈现为react native,就像常规react web前端一样

# inside the rails server controller
s3_data = S3_BUCKET.presigned_post(key: "uploads/#{SecureRandom.uuid}/${filename}", success_action_status: '201', acl: 'public-read', url: 'https://jd-foo.s3-us-west-2.amazonaws.com')
render json: {s3Data: {fields: s3_data.fields, url: s3_data.url}}
在我尝试发布到S3的那一刻,我正在使用ES6 fetch(如下所示)来构建我的http请求

    saveImage(data) {
    var url = data.url
    var fields = data.fields
    var headers = {'Content-Type': 'multipart/form-data'}
    var body = `x-amz-algorithm=${encodeURIComponent(fields['x-amz-algorithm'])}&` + 
        `x-amz-credential=${encodeURIComponent(fields['x-amz-credential'])}&` + 
        `x-amz-date=${encodeURIComponent(fields['x-amz-date'])}&` +
        `x-amz-signature=${encodeURIComponent(fields['x-amz-signature'])}&` +
        `acl=${encodeURIComponent(fields['acl'])}&` +
        `key=${encodeURIComponent(fields['key'])}&` +
        `policy=${encodeURIComponent(fields['policy'])}&` +
        `success_action_status=${encodeURIComponent(fields['success_action_status'])}&` +
        `file=${encodeURIComponent('12foo')}`
    console.log(body);
    return fetch(url, {method: 'POST', body: body, headers: headers})
        .then((res) =>  {console.log('s3 inside api res', res['_bodyText']) ; res.json()} );
}
尸体的记录看起来像

x-amz-algorithm=AWS4-HMAC-SHA256&x-amz-credential=AKIAJJ22D4PSUNBB5RAQ%2F20151027%2Fus-west-1%2Fs3%2Faws4_request&x-amz-date=20151027T223159Z&x-amz-signature=42b09d7ae134f803b10ef72d220fe74a630a3f826c7f1f625448277d0a6d93c7&acl=public-read&key=uploads%2F46be8ca3-6d3a-4bb7-a658-f2c8e058bc28%2F%24%7Bfilename%7D&policy=eyJleHBpcmF0aW9uIjoiMjAxNS0xMC0yN1QyMzozMTo1OVoiLCJjb25kaXRpb25zIjpbeyJidWNrZXQiOiJqZC1mb28ifSxbInN0YXJ0cy13aXRoIiwiJGtleSIsInVwbG9hZHMvNDZiZThjYTMtNmQzYS00YmI3LWE2NTgtZjJjOGUwNThiYzI4LyJdLHsic3VjY2Vzc19hY3Rpb25fc3RhdHVzIjoiMjAxIn0seyJhY2wiOiJwdWJsaWMtcmVhZCJ9LHsieC1hbXotY3JlZGVudGlhbCI6IkFLSUFKSjIyRDRQU1VOQkI1UkFRLzIwMTUxMDI3L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QifSx7IngtYW16LWFsZ29yaXRobSI6IkFXUzQtSE1BQy1TSEEyNTYifSx7IngtYW16LWRhdGUiOiIyMDE1MTAyN1QyMjMxNTlaIn1dfQ%3D%3D&success_action_status=201&file=12foo
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>MalformedPOSTRequest</Code><Message>The body of your POST request is not well-formed multipart/form-data.</Message>    <RequestId>DCE88AC349D7B2E8</RequestId><HostId>AKE1xctETuZMAhBFLfyuFlDxikYUlbAC7YufkM7h8Z8eVQdtLA25Z0Od/a4cMUbfW1nWnGjc+vM=</HostId></Error>
看来我的问题可能与这两者有关

  • 帖子正文格式错误,包括特殊字符问题

  • 由于没有在post正文中为S3提供足够的数据,包括键和其他信息,文档对什么是/不需要的感觉有点不清楚

  • 从S3服务器返回的错误如下所示

    x-amz-algorithm=AWS4-HMAC-SHA256&x-amz-credential=AKIAJJ22D4PSUNBB5RAQ%2F20151027%2Fus-west-1%2Fs3%2Faws4_request&x-amz-date=20151027T223159Z&x-amz-signature=42b09d7ae134f803b10ef72d220fe74a630a3f826c7f1f625448277d0a6d93c7&acl=public-read&key=uploads%2F46be8ca3-6d3a-4bb7-a658-f2c8e058bc28%2F%24%7Bfilename%7D&policy=eyJleHBpcmF0aW9uIjoiMjAxNS0xMC0yN1QyMzozMTo1OVoiLCJjb25kaXRpb25zIjpbeyJidWNrZXQiOiJqZC1mb28ifSxbInN0YXJ0cy13aXRoIiwiJGtleSIsInVwbG9hZHMvNDZiZThjYTMtNmQzYS00YmI3LWE2NTgtZjJjOGUwNThiYzI4LyJdLHsic3VjY2Vzc19hY3Rpb25fc3RhdHVzIjoiMjAxIn0seyJhY2wiOiJwdWJsaWMtcmVhZCJ9LHsieC1hbXotY3JlZGVudGlhbCI6IkFLSUFKSjIyRDRQU1VOQkI1UkFRLzIwMTUxMDI3L3VzLXdlc3QtMS9zMy9hd3M0X3JlcXVlc3QifSx7IngtYW16LWFsZ29yaXRobSI6IkFXUzQtSE1BQy1TSEEyNTYifSx7IngtYW16LWRhdGUiOiIyMDE1MTAyN1QyMjMxNTlaIn1dfQ%3D%3D&success_action_status=201&file=12foo
    
    <?xml version="1.0" encoding="UTF-8"?>
    <Error><Code>MalformedPOSTRequest</Code><Message>The body of your POST request is not well-formed multipart/form-data.</Message>    <RequestId>DCE88AC349D7B2E8</RequestId><HostId>AKE1xctETuZMAhBFLfyuFlDxikYUlbAC7YufkM7h8Z8eVQdtLA25Z0Od/a4cMUbfW1nWnGjc+vM=</HostId></Error>
    
    我很不清楚我的实际问题是什么,我应该深入到哪里

    任何输入都将不胜感激。

    您的POST请求正文不是格式良好的多部分/表单数据。
    
    <Message>The body of your POST request is not well-formed multipart/form-data.</Message>
    
    这可能不是因为您缺少了主体中的值。这里最重要的问题是身体的结构与多部分/表单数据不相似

    有关
    多部分/表单数据的工作原理,请参见。(或者找一个为您构建此功能的库。)

    您发送的内容看起来更像一些AWSAPI使用的格式,而不是S3

    显示示例
    POST
    正文的外观。你应该看到这里有很大的不同


    还请注意,
    POST
    用于基于浏览器的上载。如果你是从代码中加载,你会做很多额外的工作。这要简单得多。请求主体是二进制文件内容。或者,如果这最终将由浏览器完成,则使用浏览器进行测试,并让浏览器构建表单。

    POST请求的主体不是格式良好的多部分/表单数据。
    
    这可能不是因为您缺少了主体中的值。这里最重要的问题是身体的结构与多部分/表单数据不相似

    有关
    多部分/表单数据的工作原理,请参见。(或者找一个为您构建此功能的库。)

    您发送的内容看起来更像一些AWSAPI使用的格式,而不是S3

    显示示例
    POST
    正文的外观。你应该看到这里有很大的不同



    还请注意,
    POST
    用于基于浏览器的上载。如果你是从代码中加载,你会做很多额外的工作。这要简单得多。请求主体是二进制文件内容。或者,如果这最终将由浏览器完成,则使用浏览器进行测试,并让浏览器构建您的表单。

    您是否曾经使用预先签名的URL成功地将图像上载到s3?我在这上面浪费了5天problem@user2689931我意识到,考虑到react native中的时间和工具,构建多部分post是不可能的,因此我将base64映像数据传递给rails服务器,然后将数据从服务器(而不是设备)发布到S3,回想起来,哪种模式似乎更好。您是否曾经使用预先签名的URL成功地将图像上载到s3?我在这上面浪费了5天problem@user2689931我意识到,考虑到react native中的时间和工具,构建多部分post是不可能的,因此我将base64映像数据传递给rails服务器,然后将数据从服务器(而不是设备)发布到S3,回想起来,这似乎是一种更好的模式。