React native 使用formdata将映像发送到服务器时作出反应

React native 使用formdata将映像发送到服务器时作出反应,react-native,post,React Native,Post,我在向服务器发送图片时遇到问题,这与默认方法类似,但似乎不起作用 var source = '/Users/alexx/Library/Developer/CoreSimulator/Devices/44F0FA92-4898-4CFB-862E-4E5EC4C8AB28/data/Containers/Bundle/Application/34BCE695-4B4F-472F-AB5C-F2336AC45273/DoorLock.app/123.jpg'; const form = new F

我在向服务器发送图片时遇到问题,这与默认方法类似,但似乎不起作用

var source = '/Users/alexx/Library/Developer/CoreSimulator/Devices/44F0FA92-4898-4CFB-862E-4E5EC4C8AB28/data/Containers/Bundle/Application/34BCE695-4B4F-472F-AB5C-F2336AC45273/DoorLock.app/123.jpg';
const form = new FormData();
form.append('image', {
  uri: source,
  type: 'image/jpg',
  name: '123.jpg',
});

const data = () => {
    fetch(api ,{
      method: 'POST',
      body: form,
    })
这是我从服务器得到的响应:

{
  "_bodyBlob": {
    "_data": {
      "__collector": [
        Object
      ],
      "blobId": "78B18938-15BF-4F18-B3C8-1EB30A24D9F8",
      "name": "test.html",
      "offset": 0,
      "size": 192,
      "type": "text/html"
    }
  },
  "_bodyInit": {
    "_data": {
      "__collector": [
        Object
      ],
      "blobId": "78B18938-15BF-4F18-B3C8-1EB30A24D9F8",
      "name": "test.html",
      "offset": 0,
      "size": 192,
      "type": "text/html"
    }
  },
  "bodyUsed": false,
  "headers": {
    "map": {
      "connection": "keep-alive",
      "content-length": "192",
      "content-type": "text/html",
      "date": "Mon, 02 Nov 2020 22:57:21 GMT",
      "server": "PythonAnywhere"
    }
  },
  "ok": false,
  "status": 400,
  "statusText": undefined,
  "type": "default",
  "url": api
}
尽管这段python代码工作得很好,并且得到了正确的响应

img = {'file':('123.png', open('the path to the pic/123.png', 'rb'), 'image/png)}
post(api, files = img)

是否有任何方法可以使其正常工作,或者是服务器端无法接收正确参数的问题?

在Formdata中,当您传递文件时,需要传递3个参数,其中

  • 需要从后端输入密钥(在您的示例中为
    图像
  • 它将是一个具有三个属性的对象,分别名为
    name
    type
    、和
    uri
    ,其中type是
    mime类型
    (例如:
    image/jpeg
  • 文件名
  • 例如:

    data.append(“文件路径”{ 名称:“image.png”, 键入:“image/png”, uri:“content://com.camera/image.png" },image.png)

    将“file://”添加到源字符串的开头修复了该问题。 所以src看起来像

    var source = 'file:///Users/alexx/Library/Developer/CoreSimulator/Devices/44F0FA92-4898-4CFB-862E-4E5EC4C8AB28/data/Containers/Bundle/Application/34BCE695-4B4F-472F-AB5C-F2336AC45273/DoorLock.app/123.jpg';
    
    然后它完美地抓取,希望它能帮助任何试图使用formdata发送本地图像的人,现在的摘要是这样的

    const form = new FormData();
          form.append('file', {
            uri: source,
            name: '123.jpg',
            fileName: 'file', //optional
          });
    
    fetch(uri,{
                 method: 'post',
                 body: form,
          })
            .then(response => {
             console.log("image uploaded")
             console.log(response)
           })
            .catch(console.log);