FormData在react-native中发送字符串值而不是视频文件

时间:2020-05-18 23:28:43

标签: react-native fetch

我正在尝试使用FormData将视频上传到后端服务器。但是,当上传视频文件时,后端获取的是字符串值而不是视频文件。谢谢

const formData = new FormData();
formData.append('dare_id', `${encrypted_id}`);
formData.append(
  'video',
  Platform.OS === 'android'
    ? uri                                 //local video file uri
    : uri.replace('file://', ''),        //local video file uri
);

fetch(UPLOAD_URL, {
  method: 'POST',
  headers: {
    'Content-Type': 'multipart/form-data',
    Authorization: `Bearer ${token}`,
    Accept: 'application/json',
  },
  body: formData,
})
  .then(res => res.json())
  .then(responseJson => {
    console.log(responseJson);
  })
  .catch(error => {
    console.log(error, ' error uploading');
  });

2 个答案:

答案 0 :(得分:0)

在没有Content-Type标头的情况下重试。这是一篇文章:https://muffinman.io/uploading-files-using-fetch-multipart-form-data/

在使用Axios以相同的方式发送文件之前,我遇到了这个问题。该库足够聪明,可以正确设置标题,除非您添加它们。我怀疑您看到与边界设置有关的错误,该错误必须准确。

因此,与其明确地设置标题,不如尝试依靠默认值,并允许fetch(或axios)根据表单字段之一的文件类型包含正确地设置标题。

答案 1 :(得分:0)

要上传文件,您还必须插入文件类型和文件名。这是他的代码:

let formData=new FormData();
formData.append({uri:yourNormalizedUri,type:”I dont know exactly but it should be video/mp4 google it”, name:”video.mp4”});