React Native / Expo:提取对formData内容类型为401的响应引发“网络请求失败”错误

时间:2019-04-09 20:58:19

标签: react-native django-rest-framework fetch expo

我正在创建一个与Django Rest Framework后端交互的expo应用程序。我使用fetch来获取数据并将其发布到服务器,并设置了JWT身份验证。提取的工作方式与我期望的一样,可将json数据发送到服务器。

我还在尝试将一些图像发布到服务器上,并且按预期工作,直到我的令牌过期并且服务器返回401。在Android上发生这种情况时,请获取而不是正确解析并获得response.status 401 ,而是抛出TypeError: Network request failed。在iOS上,它只是挂起。

示例代码:

const formData = new FormData()
photos.map((photo, index) =>
  formData.append('images', {
    name: `test${index}.jpg`,
    type: 'image/jpeg',
    uri: photo.uri,
  }),
)
try {
  const response = await fetch(url, {
    body: formData,
    headers: {
      Authorization: `Bearer ${userToken}`,
    },
    method: 'POST'
  })
} catch (e) {
  console.log(e)
}

当我的服务器返回200或401时,提取通常可以正常解析,但是当我发布图像数据时,200解析成功,但是401导致获取引发网络请求失败错误。如何阻止这种情况发生?

编辑:进一步的研究表明,Python代码images = request.FILES.getlist('images', [])行对于避免出现此错误至关重要。如果我在这行代码之前手动返回,则会遇到相同的问题。我的猜测是这与分段上传被错误中断有关,但我不确定如何在应用程序中处理该问题。

1 个答案:

答案 0 :(得分:0)

这是我的简单代码FormData,带有react-native来发布带有字符串和图像的请求。

我使用了图像选择器。

您可以切换标题吗?

let formdata = new FormData();

...

fetch('http://192.168.0.1/test',{
  method: 'post',
  headers: {
    'Content-Type': 'multipart/form-data',
  },
  body: formdata
  }).then(response => {
    alert("sucess")
  }).catch(err => {
    console.log(err)
  })  
});