在React Native中通过axios上传图像

时间:2020-09-28 01:03:12

标签: javascript reactjs react-native axios expo

我已经解决这个问题已有一段时间了,显然您可以使用FormData上传图片并附加文件,但是我仍然无法解决该问题。我已经尝试过以下线程:

我的第一个问题与FormData().append()有关,在大多数解决方案中,使用uri属性配置了blob /文件,但我没有访问此属性(是这与打字稿有关吗?)。像这样:

formData.append("profile_photo", {
     uri: values.imageURI
});

这是TS返回的错误:

Argument of type '{ uri: string; }' is not assignable to parameter of type 'string | Blob'.
Object literal may only specify known properties, and 'uri' does not exist in type 'Blob'.ts(2345)

另一个关键点是使用Content-Type标头设置我的axios客户端,我在POST请求期间就这样做了,

 // Perform a profile post request
const profileResponse = await loginClient.post(
      "/user_profile",
       formData,
       {
           headers: {
                "Content-Type": "multipart/form-data",
            },
       }
);

但是,通过使用Axios的拦截器记录我的请求,这里的请求标头如下所示:

    headers:
    Accept: "application/json"
    Authorization: "Bearer 36|8SVw1DntRKni0sUn4NDX9moLluCHyYcZSadfgI5B"
    __proto__: Object

一些观察结果:

2 个答案:

答案 0 :(得分:1)

使用Form-Data模块已解决,那么您可以像这样轻松地输入uri:

formData.append("profile_photo", {
        uri: values.imageURI,
        name: "image.png",
        type: "image/png",
});

这可以通过从uri提取类型来改进。

答案 1 :(得分:0)

您需要在上传文件时发送这3个值。

  1. URI。
  2. 名称。
  3. 类型。

您可以从文件选择器中获取所有这些值。 发送为

const formData = new FormData();
formData.append("profile_photo", {
  uri: values.imageURI,
  name: values.name || "profile_photo.png",
  type: values.type || "image/png"
});

axios.post('upload_file', formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
});