如何在React Native应用程序中使用Axios将图像和视频作为blob正确上传到Azure存储容器?

vj2*_*j23 5 javascript azure react-native azure-blob-storage axios

我正在开发一个 React Native 应用程序,我需要将图像或视频作为 blob 上传到 Azure 存储帐户。目前我正在处理图像上传,但我想在这个问题中添加视频,因为视频将是下一步。我尝试了很多方法将图像上传到 Azure 存储,但无法使用 Axios 从 RN 应用程序正确上传图像。我正在使用 SAS 令牌生成上传 url,以便我可以与设备共享来自后端服务器的该 url,以便能够从设备上传图像或视频。我曾经Postman测试过该网址,一切都很好!我可以Postman将图像作为二进制正文上传。我使用了Postman显示Axios代码示例的代码生成,但我不确定此处的文件内容意味着什么。让我退后一点。

在这个React Native应用程序中,我使用react-native-image-picker从图库中选择图像并将路径传递给辅助类,我使用react-native-fs来获取图像只是为了确保它存在以及所有内容和我还base64RNFS获取字符串。现在我有了图像路径和图像的 base64 字符串,我想使用 Axios 将其上传到 Azure 服务器。我尝试了一些事情。其中一件事是来自邮递员的示例代码,但正如我所说,我不确定如何将文件内容作为示例代码中显示的数据对象传递,即

const axios = require('axios');
let data = '<file contents here>'; // <--- I don't know this

let config = {
  method: 'put',
  url: 'https://azure.blob.url/container/blob?sastoken=1234',
  headers: { 
    'x-ms-blob-type': 'BlockBlob', 
    'Content-Type': 'image/jpeg'
  },
  data : data
};

axios(config)
.then((response) => {
  console.log(JSON.stringify(response.data));
})
.catch((error) => {
  console.log(error);
});

Run Code Online (Sandbox Code Playgroud)

我在网上寻找答案,看看是否有人这样做过!好吧,我找到了很多示例代码,但它们都不适合我。我可能做错了什么,但我不知道是什么。我尝试的方法之一是fetch()通过传递base64字符串和路径来使用file://(目前专注于 Android 以使代码工作,稍后将在 iOS 部分工作,但如果代码示例/建议/帮助可以同时适用于 Android 和iOS)以不同的方式获取 blob 并将其用作 Axios 中的数据对象,但它仍然不起作用!

我尝试的其他选项之一是按照此处的RNFS.upload()建议使用。这对我的测试不起作用,因为它会因错误而失败,并且在 Github 上创建了一个问题。对话中提到了一个修复程序,可以在这里找到。但它没有合并到主分支中,我不知道如何安装该补丁,而且我宁愿使用补丁版本。

除了这些方法之外,我FormData()还尝试了一些其他方法,目前我没有代码示例。因此,我在这里通过发布我自己的问题来寻求帮助,希望得到帮助,将来如果有人尝试遵循类似的步骤,他们可以找到帮助!