本次在使用uni.uplodFile()上传图片时,遇到丢失后缀名导致后台服务器无法解析的问题,特此记录
首先放上解决问题前后对比图
问题如下:
- 当使用uni-file-picker组件上传图片时,formdata中的filename丢失后缀名,导致后台服务器返回的url无后缀名,图片无法正常显示的问题
<uni-file-picker
file-extname="jpg,jpeg,png"
mode="grid"
:auto-upload="false"
title="上传图片(选填)"
:limit="5"
file-mediatype="image"
@select="handleSelectImage">
</uni-file-picker>
...
/**
* @description :上传文件文件回调
* */
handleSelectImage(files){
console.log('select........',files)
console.log(this.forms.images)
files.tempFiles.map(imgItem =>{
console.log(imgItem)
let formdata = new FormData()
formdata.append(imgItem.name,imgItem.file)
console.log(formdata)
uni.uploadFile({
url:'/api/uploadAvatar?sessionId='+uni.getStorageSync('sessionId'),
method:'POST',
formaData:formdata,
success:(res)=> {
console.log(res,JSON.parse(res.data))
let data = JSON.parse(res.data)
console.log('添加前: ',this.forms.images)
this.forms.images = [...this.forms.images,data.data.url]
console.log('添加后: ',this.forms.images,data.data.url)
}
})
})
}
原因: uni.uploadFile()漏掉了2个必填项:
如官网所示,
- name:文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容
- filePath:要上传文件资源的路径。
- 更多配置见官方文档:uni.uploadFile官方文档
handleSelectImage(files){
console.log('select........',files)
console.log(this.forms.images)
files.tempFiles.map(imgItem =>{
console.log(imgItem)
let formdata = new FormData()
formdata.append(imgItem.name,imgItem.file)
console.log(formdata)
uni.uploadFile({
url:'/api/uploadAvatar?sessionId='+uni.getStorageSync('sessionId'),
method:'POST',
name:'file', // 必填项
filePath:imgItem.url, //必填项
formaData:formdata,
success:(res)=> {
console.log(res,JSON.parse(res.data))
let data = JSON.parse(res.data)
console.log('添加前: ',this.forms.images)
this.forms.images = [...this.forms.images,data.data.url]
console.log('添加后: ',this.forms.images,data.data.url)
}
})
})
}
来自 @select选择文件后的回调参数tempFiles的tempFiles数组中每一个文件对象的url属性
默认是字符串"file"