引言
微信小程序开发工程师经常会遇到需要限制上传图片大小的场景,它常被用于限制用户在上传图片时对带宽和存储的使用。本文将教大家在微信小程序中如何限制上传图片大小,并附上代码示例。
背景知识
在编写代码之前,我们需要了解一些背景知识。
1. 上传图片的方法
微信小程序中,我们可以通过微信官方提供的api `wx.chooseImage` 来选择图片,该方法返回一个本地文件路径的数组。
wx.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
success: function(res) {
var tempFilePaths = res.tempFilePaths
}
})
2.图片文件大小单位
图片文件的大小通常使用字节为单位,一个字节为8位,1KB(千字节)=1024字节,1MB(兆字节)=1024KB,1GB(千兆字节)=1024MB。
3.压缩图片的方法
压缩图片可以有效地减小图片的文件大小。微信小程序中自带了一个图片处理的api `wx.compressImage`。该方法接受一个图片路径和压缩质量参数,将图片压缩至指定质量。
wx.compressImage({
src: 'images/1.jpg',
quality: 80,
success: function(res) {
console.log(res.tempFilePath)
}
})
如何限制上传图片大小
本文将基于上述背景知识,为大家介绍在微信小程序中如何限制上传图片大小。
1.上传前获取图片大小
在选择图片之后,我们需要获取该图片的大小,然后判断是否超出预定的上传大小。为了获取图片大小,我们可以使用 `wx.getFileInfo` api。
wx.getFileInfo({
filePath: tempFilePaths[0],
success: function(res) {
console.log(res.size) // 返回文件大小,单位B
}
})
注意:需要在 `wx.chooseImage` 回调函数中获取图片路径后再去获取图片大小。
2.压缩图片大小
如果图片大小超出了预定大小,我们可以尝试将图片进行压缩处理,在限制数量内上传压缩后的图片。我们可以使用 `wx.compressImage` api。但是需要注意,压缩后的图片质量会受到影响,所以需要根据实际需求进行设置。
wx.compressImage({
src: tempFilePaths[0],
quality: 50,
success: function(res) {
console.log(res.tempFilePath) // 返回压缩后的临时文件路径
}
})
3.上传图片
在压缩成功后,我们需要将压缩后的图片上传处理。上传图片通常有两种方式:
**a.上传至服务器**
在微信小程序中,我们可以使用 `wx.uploadFile` api 将压缩后的图片上传至服务器,具体方法如下:
wx.uploadFile({
url: 'url',
filePath: res.tempFilePath,
name: 'file',
formData: {
'user': 'test'
},
success(res) {
console.log(res);
},
fail(res) {
console.log(res);
}
})
**b.将图片保存在云存储**
微信小程序云开发免费提供了高速、稳定、安全的对象存储服务,我们可以将压缩后的图片保存在云端,具体方法如下:
const cloudPath = 'example.png' // 文件名称和文件路径
wx.cloud.uploadFile({
cloudPath: cloudPath,
filePath: filePath,
success: res => {
console.log('上传成功', res)
},
fail: err => {
console.log('上传失败', err)
}
})
完整代码
下面是一个完整示例代码,该代码可将用户选择的图片进行压缩并上传。
wx.chooseImage({
count: 1,
sizeType: ['original', 'compressed'],
sourceType: ['album', 'camera'],
success: function(res) {
var tempFilePaths = res.tempFilePaths
wx.getFileInfo({
filePath: tempFilePaths[0],
success: function(res) {
var fileSize = res.size; // 获取图片文件的大小
if (fileSize <= 1024 * 1024 * 5) { // 判断图片大小是否小于5M
wx.cloud.uploadFile({
cloudPath: 'example.png',
filePath: tempFilePaths[0],
success: res => {
console.log('上传成功', res)
},
fail: err => {
console.log('上传失败', err)
}
})
} else { // 图片大于5M,压缩后上传
wx.compressImage({
src: tempFilePaths[0],
quality: 50,
success: function(res) {
wx.cloud.uploadFile({
cloudPath: 'example.png',
filePath: res.tempFilePath,
success: res => {
console.log('上传成功', res)
},
fail: err => {
console.log('上传失败', err)
}
})
}
})
}
}
})
}
})
总结
限制上传图片大小在微信小程序中是一种常见需求,我们可以使用 `wx.getFileInfo`,`wx.compressImage` 和 `wx.uploadFile` 或 `wx.cloud.uploadFile` 函数来实现这个功能。希望本文可以帮助到你们,有问题或建议,欢迎在评论区留言。