React native 将照片从react本机应用程序上载到strapi api

React native 将照片从react本机应用程序上载到strapi api,react-native,upload,expo,strapi,React Native,Upload,Expo,Strapi,我最近开始使用strapi。我想从我的应用程序(react native/expo)上传一张照片,但我有一些不理解的错误 首先,我在没有strapi的服务器上测试了照片上传,我没有遇到任何问题,照片已发送 const form = new FormData(); form.append('files', {uri: photoSource.uri, name: filename, type: 'image/jpeg'}); const requestConfig = { method: '

我最近开始使用strapi。我想从我的应用程序(react native/expo)上传一张照片,但我有一些不理解的错误

首先,我在没有strapi的服务器上测试了照片上传,我没有遇到任何问题,照片已发送

const form = new FormData();
form.append('files', {uri: photoSource.uri, name: filename, type: 'image/jpeg'});

const requestConfig = {
  method: 'POST',
  headers: {
    "Authorization": "Bearer ey...",
    "Content-Type": "multipart/form-data;",
  },
  "body": form
};

const response = await fetch("http://myserveradresse/upload", requestConfig);

let responseJson = await response.json();
console.log(responseJson);
当我切换到Strapi时,它不再工作了。当我看到有必要发送缓冲区时,我尝试:

form.append('files', new Buffer(photoSource, 'base64'));
但它不起作用

在此之前,我还尝试使用其他方法发送图片:
FileSystem.uploadAsync
xmlhttprequest

但什么都不管用。Strapi总是向我发送相同的错误:

Object {
  "data": Object {
    "errors": Array [
      Object {
        "id": "Upload.status.empty",
        "message": "Files are empty",
      },
    ],
  },
  "error": "Bad Request",
  "message": "Bad Request",
  "statusCode": 400,
}

我想我一定是误解了什么,但我不知道是什么。

内容类型也需要添加边界,这将由fetch(希望其他玩家)自动添加,所以不要在标题中添加内容类型。您还需要将文件作为blog发送,并将filename作为append中的第三个元素发送。第三个因素是FormData如何知道它实际上是一个文件,这就是为什么strapi对它从“文件”中得到的东西感到不安

以下是我如何在用户上成功打包我的个人资料照片:

    let formData = new FormData();
    let imgBlob = await (await fetch(photo.uri)).blob()
    
    formData.append(
      "files", imgBlob, filename)
    formData.append("refId",user.id)
    formData.append("source","users-permissions")
    formData.append("ref","user")
    formData.append("field","profilePhoto")
  
    const requestConfig = {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${store.getState().jwt}`
      },
      body: formData,
    };


众所周知,Strapi很难上传图像,因此下一步可能仍然会出现500个错误,但这是一个正确的方向。

内容类型也需要添加边界,这将由fetch(希望其他玩家)自动添加,所以将内容类型保留在标题之外。您还需要将文件作为blog发送,并将filename作为append中的第三个元素发送。第三个因素是FormData如何知道它实际上是一个文件,这就是为什么strapi对它从“文件”中得到的东西感到不安

以下是我如何在用户上成功打包我的个人资料照片:

    let formData = new FormData();
    let imgBlob = await (await fetch(photo.uri)).blob()
    
    formData.append(
      "files", imgBlob, filename)
    formData.append("refId",user.id)
    formData.append("source","users-permissions")
    formData.append("ref","user")
    formData.append("field","profilePhoto")
  
    const requestConfig = {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${store.getState().jwt}`
      },
      body: formData,
    };

众所周知,Strapi很难上传图像,因此下一步可能仍然会出现500个错误,但这是一个正确的方向