首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rn-fetch-blob错误: RNFetchBlob.fetchBlobForm无法创建请求正文

rn-fetch-blob错误: RNFetchBlob.fetchBlobForm无法创建请求正文
EN

Stack Overflow用户
提问于 2020-02-12 18:59:08
回答 2查看 5.6K关注 0票数 3
代码语言:javascript
复制
async postFileUpload(payload) {
    const rnfetchfile = RNFetchBlob.wrap(payload.uri);
    try {
    console.log(
        'POST',
        'https://******.***.**/******/***/upload_*******_file',
        {
          ...this.config,
          'Content-Type': 'multipart/form-data',
        },
        [
          // element with property `filename` will be transformed into `file` in form data
          {
            name: 'files',
            filename: payload.name,
            data: rnfetchfile.replace('file://file:///', 'file://'),
          },
        ],
      );
      const res = await RNFetchBlob.fetch(
        'POST',
        'https://******.***.**/******/***/upload_*******_file',
        {
          ...this.config,
          'Content-Type': 'multipart/form-data',
        },
        [
          // element with property `filename` will be transformed into `file` in form data
          {
            name: 'files',
            filename: payload.name,
            data: rnfetchfile.replace('file://file:///', 'file://'),
          },
        ],
      );
    const response = JSON.parse(res.data);
      console.log('api upload adpostimage', response);
      return response;
    } catch (err) {
      console.log('postFileUpload', err.response, err);
      Toast.show(err.response.data.message, Toast.SHORT);
      throw err.response.data;
    }

控制台消息中的res抛出错误是

代码语言:javascript
复制
POST https://******.***.**/******/***/upload_*******_file {Content-Type: "multipart/form-data", Authorization: "Bearer ******.***.*****"} 
[{…}]
0:
name: "files"
filename: "*****.pdf"
data: "RNFetchBlob-file://Users/********/tmp/*****/B****.pdf"}
代码语言:javascript
复制
postFileUpload undefined Error: RNFetchBlob.fetchBlobForm failed to create request body
at index.js:313
at MessageQueue.__invokeCallback (MessageQueue.js:483)
at MessageQueue.js:135
at MessageQueue.__guard (MessageQueue.js:384)
at MessageQueue.invokeCallbackAndReturnFlushedQueue (MessageQueue.js:134)
at debuggerWorker.js:69

我正在尝试上传一个文件使用rn-fetch-blob和一些疯狂的事情发生了(‘file://file:///’,'file://'),由于file://file///输出似乎不正确,我认为这主要是rnfetchfile.replace的问题,请帮帮我

EN

回答 2

Stack Overflow用户

发布于 2020-05-01 21:05:34

正如here所说,只需使用decodeURIComponent(uri)即可

这是我的代码:

代码语言:javascript
复制
const realPath = Platform.OS === 'ios' ? uri.replace('file://', '') : uri;

const data = [
  {
     name: 'file',
     filename,
     type,
     data: RNFetchBlob.wrap(decodeURIComponent(realPath)),
  },
  {name: 'bla', data: 'bla'}
]
票数 12
EN

Stack Overflow用户

发布于 2020-02-23 17:14:25

尝试将file://file://替换为“”空字符串..

代码语言:javascript
复制
rnfetchfile.replace('file://file:///', '') 

- @Abhishek Ghosh评论说,这是一个需要技巧,它可以工作,但文件在uri中将不可用。您上传的文件将无法打开

我试着去做

代码语言:javascript
复制
data: decodeURIComponent(rnfetchfile.replace('file://file:///', 'file:///')

希望这能帮上忙

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60186820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档