繁体   English   中英

使用FormData()HTTP TypeError响应本机Fetch():网络请求失败

[英]React Native Fetch() with FormData() HTTP TypeError: Network request failed

在Android上处理图片后,正在使用FormData()Fetch()将图像文件发布和镜像到我的服务器。

我正在使用公共IP而不发布到我的本地主机或任​​何东西,并且不使用HTTPS,也使用Genymotion Emulator。

我的代码:

      var fd = new FormData();
      fd.append('image', {path:'file:///'}); 

      fetch(UPLOAD_URI,{
        method: 'POST',
        headers: {
          'Content-Type': 'multipart/form-data',
        },
        body: fd
        }).then(response => {
          console.log("image uploaded")
        }).catch(err => {
          console.log(err)
        })

在catch中返回错误作为参数err:

TypeError: Network request failed
    at XMLHttpRequest.xhr.onerror (fetch.js:441)
    at XMLHttpRequest.dispatchEvent (event-target.js:172)
    at XMLHttpRequest.setReadyState (XMLHttpRequest.js:542)
    at XMLHttpRequest.__didCompleteResponse (XMLHttpRequest.js:378)
    at XMLHttpRequest.js:482
    at RCTDeviceEventEmitter.emit (EventEmitter.js:181)
    at MessageQueue.__callFunction (MessageQueue.js:236)
    at MessageQueue.js:108
    at guard (MessageQueue.js:46)
    at MessageQueue.callFunctionReturnFlushedQueue (MessageQueue.js:107)

是否缺少某种权限,这是什么问题?

干杯,

对于我在android上的情况,以下模块帮助我解决了此问题,因为它使用java将文件发送到服务器,并在PHP中使用$ _FILES进行获取:

npm install react-native-file-transfer-android

我的代码:

var FileTransfer = require('react-native-file-transfer-android');

const UPLOAD_URI = "http://< IP / Domain>/index.php"


  makeUuid()
  {
      var text = "";
      var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

      for( var i=0; i < 5; i++ )
          text += possible.charAt(Math.floor(Math.random() * possible.length));

      return text;
  }

  sendImageToServer(data){

        var uuid = this.makeUuid();
        FileTransfer.upload({
          uri: data,
          uploadUrl: UPLOAD_URI,
          fileName: 'temp.jpg',
          mimeType: 'image/jpg',
          headers: {
            'Accept': 'application/json'
          },
          data: {
            name:uuid
          }
            }, (err, res) => {
              if(err) {
                console.error(err);
              } else {
                console.log(res);
              }
          });
   }

  saveImage(imgDate){

    let states = {camera:false};
    states[this.state.ActiveImage] = imgDate.path;
    this.sendImageToServer(imgDate.path);
    this.setState({
      ...states
    });




  }

干杯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM