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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FormData发送字符串值而不是react-native中的视频文件相关的知识,希望对你有一定的参考价值。

我正在尝试使用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');
  );
答案

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

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

因此,而不是显式设置标题,请尝试依赖默认值,并允许fetch(或axios)根据表单字段之一的文件类型包含正确设置标题。

另一答案

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

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

以上是关于FormData发送字符串值而不是react-native中的视频文件的主要内容,如果未能解决你的问题,请参考以下文章

payload form data 参数和附件

从表单中的选择列表中发送值而不是键

如何从字符串创建文件并通过 FormData 发送

js模拟发送 FormData数据

通过 JQuery AJAX 一起发送 FormData 和 String 数据?

如何在 Flask 中接受通过 ajax 发送的 FormData?