【问题标题】:weird behavior on formData and Axios in RN 62.2RN 62.2 中 formData 和 Axios 的奇怪行为
【发布时间】:2020-05-18 16:09:13
【问题描述】:

我在向导中使用react-native-image-crop 选择器和react-redux。在该向导的一个步骤中,用户上传他/她的图像,最后将向导数据提交到服务器。 所以我使用这样的表单数据:

    let formData = new FormData();

    files?.forEach((f) => {
      let pathParts = f.path.split('/');
      let file = {
        uri: Platform.OS === 'android' ? f.path : f.path.replace('file://', ''),
        type: f.mime,
        name: pathParts[pathParts.length - 1],
      };
      formData.append('attachments', file);
    });
    try {
      let response = await axios.post('http://example.com/route', formData, {
        headers: {'Content-Type': 'multipart/form-data'},
      });
    } catch (error) {
      console.log(error);
      console.log(formData);
    }

有图片时有错误:

[Error: Network Error]

formData 包含:

{"_parts": [["attachments", [Object]]]}

每个文件都是这样的json:

{
   "name": "cat_pic_9.jpg",
   "type": "image/jpeg",
   "uri": "file:///data/user/0/com.company.app/cache/react-native-image-crop-picker/cat_pic_9.jpg"
}

我试过global.originalFormData和单独安装Form-Data包,但没有区别。

现在我看到了这个错误:"_response": "read failed: EBADF (Bad file descriptor)" :/

【问题讨论】:

    标签: react-native file-upload axios multipartform-data


    【解决方案1】:

    像这样发出 Axios 请求

    let formData = new FormData();
    
    files?.forEach((f) => {
      let pathParts = f.path.split('/');
      let file = {
        uri: f.path,
        type: 'image/jpeg',
        name: pathParts[pathParts.length - 1],
      };
      formData.append('attachments', file);
    });
    try {
      let response = await axios({
        method: 'post',
        url: 'http://example.com/route',
        data: formData,
        headers: {'Content-Type': 'multipart/form-data' }
      })
    } catch (error) {
      console.log(error);
      console.log(formData);
    }
    

    【讨论】:

    • 我确实尝试过,但没有区别,似乎问题是无法从手机存储中获取表单数据,但我可以轻松显示 redux 存储的图像。我想我需要降级 RN。新的 RN 62.2 只是令人头疼,有很多错误。
    • 是的,我有读取权限,我在图像容器中显示图像!
    • 我正在尝试回滚到 61.4,我会评论结果。
    • 请使用这个 mime 类型 'image/jpeg' 而不是 f.mime,因为我很确定这个 mime 类型问题
    • 我展示了哑剧的内容!请看问题。
    【解决方案2】:

    对于那些在 Android 中上传图片时遇到问题并且在 react-native 62.2 中遇到网络错误的用户,请使用此代码上传图片。上传将开始正常工作。

          formData.append('file', {
          name: 'photo.jpg',
          uri: imageUrl,
          type: 'image/jpeg',
    
        });
    

    【讨论】:

      猜你喜欢
      • 2019-12-13
      • 2017-06-15
      • 2021-02-11
      • 2022-09-24
      • 2020-05-07
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 2018-12-27
      相关资源
      最近更新 更多