微信小程序图片上传的问题(限制上传图片的大小和格式

背景:taro框架开发微信小程序,上传图片

问题:

  • 需求:上传图片做了大于5M终止上传并提示,且上传图片的格式限制为:png/jpg/jpeg
  • 结果:在微信开发者工具上两个逻辑是没有问题的,但是在手机上预览时,却不对。
    上传5.5M的图片后,并没有终止上传而是提示框内显示:压缩…
    上传gif图片后,也没有终止上传,打印结果图片格式为** .jpg**

代码如下:

Taro.chooseMedia({
	count: 1, // 默认9
	mediaType: ['image'],
	sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
	sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
	success: function (res) {
		console.log('upload - res', res)
		if (res.tempFiles[0].size > 5 * 1024 * 1024) {
			Taro.showToast({
				title: '图片不能大于5M',
				icon: 'none',
			})
			return
		}
		Taro.getImageInfo({
			src: res.tempFiles[0].tempFilePath,
			success(info) {
				const allowedExtensions = ['jpg', 'jpeg', 'png']
				if (!allowedExtensions.includes(info.type?.toLowerCase())) {
					Taro.showToast({
						title: '仅支持 JPG/PNG 格式',
						icon: 'none',
					})
					return
				}
				// 上传逻辑...
			},
		})
	},
})
					

发现的问题是:

wx.chooseMedia这个API的sizeType配置,如果选择了compressed,微信小程序在上传图片时会进行压缩

  • 接近5M的图片,会被压缩为不到5M
  • gif图片在压缩后,格式为jpg的图片

微信小程序在上传图片时会进行自动压缩,主要原因是:

  1. 微信为了优化性能和用户体验,会对选择的图片进行默认压缩

  2. 压缩后的图片大小会远小于原图,导致您设置的大小限制条件无法按预期工作

修改后的代码:去掉 ‘compressed’ 选项

Taro.chooseMedia({
	count: 1, // 默认9
	mediaType: ['image'],
	sizeType: ['original'], // 只能选择原图
	sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
	success: function (res) {
		console.log('upload - res', res)
		if (res.tempFiles[0].size > 5 * 1024 * 1024) {
			Taro.showToast({
				title: '图片不能大于5M',
				icon: 'none',
			})
			return
		}
		Taro.getImageInfo({
			src: res.tempFiles[0].tempFilePath,
			success(info) {
				const allowedExtensions = ['jpg', 'jpeg', 'png']
				if (!allowedExtensions.includes(info.type?.toLowerCase())) {
					Taro.showToast({
						title: '仅支持 JPG/PNG 格式',
						icon: 'none',
					})
					return
				}
				// 上传逻辑...
			},
		})
	},
})
					
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值