Vue+Axios+lrz.js实现微信端图片压缩上传
3 浏览量
更新于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 上传
2023-12-31 上传
2024-06-17 上传
2020-02-13 上传
2021-08-06 上传
2024-02-10 上传
weixin_38645133
- 粉丝: 7
- 资源: 964
最新资源
- 火炬连体网络在MNIST的2D嵌入实现示例
- Angular插件增强Application Insights JavaScript SDK功能
- 实时三维重建:InfiniTAM的ros驱动应用
- Spring与Mybatis整合的配置与实践
- Vozy前端技术测试深入体验与模板参考
- React应用实现语音转文字功能介绍
- PHPMailer-6.6.4: PHP邮件收发类库的详细介绍
- Felineboard:为猫主人设计的交互式仪表板
- PGRFileManager:功能强大的开源Ajax文件管理器
- Pytest-Html定制测试报告与源代码封装教程
- Angular开发与部署指南:从创建到测试
- BASIC-BINARY-IPC系统:进程间通信的非阻塞接口
- LTK3D: Common Lisp中的基础3D图形实现
- Timer-Counter-Lister:官方源代码及更新发布
- Galaxia REST API:面向地球问题的解决方案
- Node.js模块:随机动物实例教程与源码解析