我正在创建一个与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', [])
行对于避免出现此错误至关重要。如果我在这行代码之前手动返回,则会遇到相同的问题。我的猜测是这与分段上传被错误中断有关,但我不确定如何在应用程序中处理该问题。
答案 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)
})
});