我尝试使用预先指定的网址将iOS设备上的jpeg图像上传到S3。这就是我正在做的事情:
const file = {
uri: imageURL,
type: 'image/jpeg'
};
const formData = new FormData();
formData.append('photo', file);
formData.append('Content-Type', 'image/jpeg');
const response = await axios({
method: 'PUT',
headers: {
'Content-Type': 'multipart/form-data'
},
url: s3PreSignedURL,
data: formData
});
(该应用程序处于原生状态,我使用react-native-camera拍摄照片。)
问题是图片上传了。当我下载它并尝试在我的Mac上查看它时The file could not be opened
。 但如果我在Photoshop中打开它就可以了。知道发生了什么吗?
您可以在此处找到示例图片:https://s3-ap-southeast-1.amazonaws.com/eyesnapdev/scans/1509856619481-71809992-b818-4637-93f1-9a75b6588c2c.jpg
答案 0 :(得分:1)
似乎您没有使用formData
发送图片,而应该是这样的:
const file = {
uri: imageURL,
type: 'image/jpeg'
};
const formData = new FormData();
formData.append('photo', file);
formData.append('Content-Type', 'image/jpeg');
const response = await axios({
method: 'PUT',
headers: {
'Content-Type': 'multipart/form-data'
},
url: s3PreSignedURL,
data: formData // not **file**
});
答案 1 :(得分:1)
您上传的图片正在保存整个多部分表单数据,并包含以下信息(在文本编辑器中打开您的s3 jpg图像以查看):
--K_B9dYtGXt4.LjeMIncq0ajcL6vDRYqD1hRiwoIOJzPKYTVi8jTYT_f07RZw37Om1NJwGi
content-disposition: form-data; name="photo"
content-type: image/jpeg
s3上传只需要在帖子中上传文件数据而不是多部分表格。
在深入研究React本机核心之后,我认为以下代码应该可行。我自己还没有尝试过:
fetch(s3PreSignedURL,{
method:"PUT",
headers: {
'Content-Type': 'image/jpg'
},
body:{uri:imageURL}
});
或使用axios:
axios({
method: 'PUT',
headers: {
'Content-Type': 'image/jpg'
},
url: s3PreSignedURL,
body:{uri:imageURL}
});