本次在使用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个必填项:

在这里插入图片描述
如官网所示,

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"

本次在使用uni.uplodFile()上传图片时,遇到丢失后缀名导致后台服务器无法解析的问题,特此记录首先放上解决问题前后对比图解决前:formdata filename属性无后缀解决后,filename参数已有后缀,并且为文件名:问题如下:当使用uni-file-picker组件上传图片时,formdata中的filename丢失后缀名,导致后台服务器返回的url无后缀名,图片无法正常显示的问题&lt;uni-file-picker file-extname="
uniapp H5 上传图片没有后缀名uniapp中h5通过uni.chooseimage直接上传图片没有图片扩展名,uni.uploadFile在H5下上传blob文件链接的时候无法获取文件后缀扩展名,解决uni.uploadFile上传图片丢失后缀名问题,完美解决 uniapp 发布h5上传头像base64图片,ufilename没有后缀名,H5模式下上传的文件,服务端拿不到后缀名怎么办,uni.canvasToTempFilePath H5 生成的文件没有后缀名uniapp H5上传图片后调用u
uni.saveFiled 本地保存 ,名字是时间戳 实现缓存:如何让保存到 本地的文件 和 下载文件的原名 一样 (好像两个都不支持下载文件到指定位置和改下载文件名) 解决方案思路 可以考虑uni.setStorageSync(本地缓存) 同时缓存两个值 当下载文件名改时 才进行下... limit="1" ,则最多选择张图片 file-mediatype="image",限定只选择图片 file-extname='png,jpg',限定只选择 png和jpg后缀的图片 auto-upload="false",可以停止自动上传,通过ref调用upload方法自行选择上传时机。与ref="files"搭配使用,this.$refs.files.upload()。 :limit="10" :file-list="form._digitalMediaDtoList" :before-upload="fn_upload__before" :http-request
uni-uploadFileuni-app 中的文件上传 API,可以用于将本地文件上传到服务器。使用 uni-uploadFile 需要以下步骤: 1. 在页面中引入 uni.uploadFile API:`import uni from '@dcloudio/uni-app'` 2. 调用 uni.uploadFile 方法来上传文件,示例代码如下: ```javascript uni.uploadFile({ url: 'http://example.com/upload', // 上传接口地址 filePath: '本地文件路径', // 要上传的文件路径 name: 'file', // 上传文件的 name,后端接口根据这个参数获取上传的文件 success: function (res) { console.log('上传成功', res) fail: function (err) { console.log('上传失败', err) 其中,url 为上传接口地址,filePath 为本地文件路径,name 为上传文件的 name,success 是上传成功后的回调函数,fail 是上传失败后的回调函数。 需要注意的是,如果要上传多个文件,可以多次调用 uni.uploadFile 方法来上传。另外,如果上传的文件比较大,可以使用 uni.showLoading 和 uni.hideLoading 方法来显示上传进度。