gpt4 book ai didi

amazon-web-services - 使用预先签名的 URL React Native 上传到 S3

转载 作者:行者123 更新时间:2023-12-01 21:12:32 24 4
gpt4 key购买 nike

一直尝试使用预签名 URL 将图像从 React Native 上传到 S3,但没有成功。这是我的代码:

在节点中生成预签名 URL:

const s3 = new aws.S3();

const s3Params = {
Bucket: bucket,
Key: fileName,
Expires: 60,
ContentType: 'image/jpeg',
ACL: 'public-read'
};

return s3.getSignedUrl('putObject', s3Params);

这是 RN 对 S3 的请求:

var file = {
uri: game.pictureToSubmitUri,
type: 'image/jpeg',
name: 'image.jpg',
};

const xhr = new XMLHttpRequest();
var body = new FormData();
body.append('file', file);
xhr.open('PUT', signedRequest);
xhr.onreadystatechange = () => {
if(xhr.readyState === 4){
if(xhr.status === 200){
alert('Posted!');
}
else{
alert('Could not upload file.');
}
}
};
xhr.send(body);

game.pictureToSubmitUri = assets-library://asset/asset.JPG?id=A282A2C5-31C8-489F-9652-7D3BD5A1FAA4&ext=JPG

signedRequest = https://my-bucket.s3-us-west-1.amazonaws.com/8bd2d4b9-3206-4bff-944d-e06f872d8be3?AWSAccessKeyId=AKIAIOLHQY4GAXN26FOQ&Content-Type=image%2Fjpeg&Expires=1465671117&Signature= bkQIp5lgzuYrt2vyl7rqpCXPcps%3D&x-amz-acl=公共(public)读取

错误消息:

<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>

我可以使用生成的 url 成功 curl 和图像到 S3,并且我似乎能够从 RN 成功发布到 requestb.in (但是我只能看到 requestb.in 上的原始数据,所以不能 100% 确定图像正确地存在)。

基于所有这些,我将问题范围缩小到 1) 我的图像上传时间不正确,或者 2) S3 想要我的请求的方式与它传入的方式不同。

任何帮助将不胜感激!

更新

如果正文只是文本 ({'data': 'foo'}),则可以成功从 RN 发布到 S3。也许AWS不喜欢多种形式的数据?我怎样才能在 RN 中以文件形式发送???

最佳答案

要在 iOS 和 Android 上上传预签名的 S3 URL,请使用 react-native-blob-util

代码片段:

import RNBlobUtil from 'react-native-blob-util'

const preSignedURL = 'pre-signed url'
const pathToImage = '/path/to/image.jpg' // without file:// scheme at the beginning
const headers = {}

RNBlobUtil.fetch('PUT', preSignedURL, headers, RNBlobUtil.wrap(pathToImage))

于 2022 年 10 月 19 日编辑,并将不受支持的 RN Fetch Blob 替换为 React Native Blob Util 包。

关于amazon-web-services - 使用预先签名的 URL React Native 上传到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37760355/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com