Vue+Axios+lrz.js实现微信端图片压缩上传
52 浏览量
更新于2024-08-30
收藏 88KB PDF 举报
"基于vue+axios+lrz.js微信端图片压缩上传方法"
在开发微信端的Vue项目时,图片上传是一项常见的需求。本方法主要针对以下四个业务场景:单张图片上传(如个人头像、实名认证)、多张图片上传(如工单记录)、按指定尺寸压缩图片以及支持从相册选择或直接拍照上传。在实现这些功能时,开发者可能会遇到一些挑战,例如微信JSSDK的限制和Android版微信的兼容性问题。
首先,尝试使用微信JSSDK的`wx.chooseImage`接口进行图片上传。然而,JSSDK并不支持直接指定压缩尺寸,只能在服务器端通过`localId`处理图片大小。此外,微信JSSDK的权限验证在单页应用中会有特定问题,尤其是在iOS设备上可能出现`config fail`的情况,这通常与路由模式(hash或history)有关。为了解决这个问题,需要对微信JSSDK的配置和权限验证有深入理解。
由于考虑到网页可能需要在微信以外的浏览器上运行,因此放弃纯微信JSSDK的上传方式。转而使用lrz.js,这是一个前端图片压缩库,可以实现在前端按指定尺寸压缩图片,从而满足了业务需求的第三点。
接下来是Android版微信的一个常见问题,即`input`元素的`onchange`事件在选择图片后不触发。这是因为微信内置浏览器对`accept`属性的特殊处理。解决办法是将`accept`属性设置为`image/*`,允许所有类型的图片,并使用`@change`监听器捕获文件选择事件。如果只需要拍照功能,可以添加`capture="camera"`属性,但需要注意某些机型在拍照后可能返回主页,这可能是由于其他因素导致的问题,需要进一步调试。
在Vue项目中,结合axios库可以方便地发送带有压缩图片的HTTP请求。通常,我们需要先使用lrz.js对图片进行压缩,然后将压缩后的Base64字符串转换为`FormData`对象,最后使用axios的`POST`方法上传至服务器。示例代码如下:
```javascript
import axios from 'axios';
import lrz from 'lrz';
// 压缩图片
const result = await lrz(file, { width: 800 }); // 压缩到800px宽度
if (result.errno === 0) {
const formData = new FormData();
formData.append('file', result.file.base64, 'compressed.jpg');
// 发送请求
axios.post('/upload', formData, {
headers: { 'Content-Type': 'multipart/form-data' }
}).then(response => {
console.log('图片上传成功:', response.data);
}).catch(error => {
console.error('图片上传失败:', error);
});
} else {
console.error('图片压缩失败:', result.errmsg);
}
```
在这个过程中,我们需要注意图片的质量和大小之间的平衡,以确保用户在上传高质量图片的同时,不会导致网络传输负担过重。同时,对于服务器端,需要适配接收`FormData`类型的数据,并处理上传的图片。
基于vue+axios+lrz.js的微信端图片压缩上传方法,不仅解决了微信JSSDK的局限,还确保了在不同平台上的兼容性和用户体验。通过前端压缩图片,可以更好地控制图片质量和上传速度,为用户提供了流畅的图片上传体验。
2018-10-18 上传
2024-02-23 上传
2024-11-26 上传
2024-06-17 上传
2024-12-02 上传
2021-08-06 上传
2020-02-13 上传
weixin_38645133
- 粉丝: 7
- 资源: 964
最新资源
- 制作VC++启动界面——可显示图片的关于窗口
- Comprice:trade_mark: - 价格比较-crx插件
- webchallenge-vanillaJS
- 基于pytorch的图像修复校准
- software:软件
- GDataDB:Net的Google Spreadsheets的类似于数据库的界面
- hall_admin:我在GitHub上的第一个存储库
- Programmazione_di_Rete:网络编程项目 - Java RMI(罚款)
- vfs dropbox plugin:适用于Apache Commons VFS的Dropbox插件-开源
- YUV2RGB.dll YUV转换RGB算法的API封装
- Alitools Shopping Assistant-crx插件
- JinShop:Minecraft有趣而高效的PythonFlask商店
- googleImageSearch:使用谷歌图像搜索api并在网格交错视图中显示结果
- 免费倒酒:调酒师工具-图灵学校FEE计划MOD 3的Solofinal项目
- Windows日志外发配置
- 速卖通图片搜索-crx插件