React Native缺少readAsArrayBuffer函数。

15
我试图将一个通过react-native-image-picker检索的uri图像转换为数组缓冲区,以便将文件上传到S3(因为S3不支持put请求的form-data,所以我不能使用它)。这是我的代码。
    let fetched = await fetch(pictureInfo.uri)
    console.log("Fetched uri:", fetched)
    let arrayBuffer = await fetched.arrayBuffer()

但是运行它时,我收到以下错误:

Error: FileReader.readAsArrayBuffer未实现

如何将其转换为缓冲区并上传到S3而不将其转换为base64?

1个回答

1

不需要使用base64方法,您可以直接使用react-native-fetch-blob包上传图像文件。

假设您已经为react-native安装了aws-sdk

// Add Config

AWS.config.update({
    region: // Your Region,
    accessKeyId: // Your Access key,
    secretAccessKey: // Your Secret Key,
    sessionToken: // Your Session Token,
});

// Initialize
const s3 = new AWS.S3();

// Get Signed Url
const signedUrl = await s3.getSignedUrl('putObject', {
    Bucket: // Your Bucket,
    Key: // Your Key,
    ContentType: // Content Type, example `image/jpg`,
});


const s3 = new AWS.S3();

const upload = await RNFetchBlob.fetch('PUT', signedUrl, {
    'Content-Type': // Content Type
}, RNFetchBlob.wrap(localPath)); // where local path would be your local image path ${image.uri}

我想避免将图像生成base64,因为图片是通过相机卷轴(或直接从相机)获取的,而生成base64可能会非常耗费资源。我正在寻找一种直接从URI上传文件的方法。 - nicecatch
在imagepicker中,您可以设置一个参数来避免生成base64。问题是,当我使用FormData时,有效载荷被发送为多部分,而S3不支持此格式。唯一的方法是使用base64吗? - nicecatch
React Native提供了一个FormData的polyfill,可以在这里找到:https://github.com/facebook/react-native/blob/c6b96c0df789717d53ec520ad28ba0ae00db6ec2/Libraries/Network/FormData.js#L25。你可以使用图片的URI来发送图片,但这将生成一个多部分请求。 - nicecatch
那可能是一个选项(如果它与React Native兼容),但我不想为了仅上传功能将整个S3 AWS包引入我的项目中。 - nicecatch
其余的取决于你,你认为哪个选项最容易实现。 - Pritish Vaidya
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接