近期一个用react-native的项目,上传图片功能我们用的是FormDate,按照文档的提示写好代码。
async function uploadFile(url, params, fileUrl,fileName) {
let Access_Token = await Storage.getItem('Access_Token');
let data = new FormData();
data.append('file', {
uri: fileUrl,
name: fileName,
type: 'image/jpeg'
});
Object.keys(params).forEach((key)=> {
if (params[key] instanceof Date) {
data.append(key, value.toISOString())
} else {
data.append(key, String(params[key]))
}
});
const fetchOptions = {
method: 'POST',
headers: {
'Accept': 'application/json',
'Access_Token': Access_Token ? Access_Token : '',
'UserAgent':os
},
body: data
};
return fetch(url, fetchOptions)
.then(checkStatus)
.then(parseJSON)
}
android运行之后一切ok,完美上传!但是ios出现了问题,上传都失败了!!!说明发送的参数里面应该有ios无法识别的。找了半天,最后终于确定,是file里面的参数name出了问题。代码如下:
this.props.onFileUpload(file,response.fileName||'未命名文件')
.then(result=>{
this.setState({
loading:false
})
})
因为react-native-image-picker的showImagePicker返回值里面没有fileName,就改成了‘未命名文件’,没有后缀,所以ios无法识别,导致上传失败。改成'未命名文件.jpg'就可以正常上传了。