uni-app uni.chooseImage 选择从其他软件保存的原图图片不能上传
uni-app uni.chooseImage 选择从其他软件保存的原图图片不能上传
操作步骤:
1
预期结果:
1
实际结果:
1
bug描述:
上传图片是空白的,我目前复现只能在手机上,所以不太好排查问题。请问有哪位遇到次问题了
信息类别 | 信息内容 |
---|---|
产品分类 | uniapp/小程序/微信 |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | 1.0.0 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.36 |
第三方开发者工具版本号 | 1.0.0 |
基础库版本号 | 1.0.0 |
项目创建方式 | HBuilderX |
2 回复
你那个vconsole打开看看有没有图片路径错误信息,看看你图片是保存在哪里的然后去选择的,看看是不是沙盒环境不让查看其他应用保存的文件
在 uni-app
中使用 uni.chooseImage
接口选择图片时,确实有可能遇到从其他软件保存的原图因为文件大小或格式问题而无法上传的情况。这通常是由于图片文件过大或不被服务器支持的图片格式。为了确保图片能够成功上传,我们可以采取一些措施,比如压缩图片、转换格式等。以下是一个示例代码,展示了如何使用 uni-app
提供的接口和第三方库来压缩图片,然后再上传。
1. 安装第三方库 compressorjs
首先,你需要安装 compressorjs
库来压缩图片。在 uni-app
项目中,你可以通过修改 webpack.base.conf.js
或在 script
标签中直接引入 CDN 的方式来使用它。这里假设你通过 CDN 引入:
<script src="https://cdn.jsdelivr.net/npm/compressorjs@1.1.1/dist/compressor.min.js"></script>
2. 选择并压缩图片
接下来,我们使用 uni.chooseImage
选择图片,并使用 compressorjs
压缩图片:
uni.chooseImage({
count: 1, // 选择图片的数量
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机
success: (res) => {
const filePath = res.tempFilePaths[0];
new Compressor(filePath, {
quality: 0.6, // 图片质量,0到1之间
success: (compressedFile) => {
const compressedFilePath = compressedFile.path;
// 接下来,你可以使用 uni.uploadFile 上传压缩后的图片
uni.uploadFile({
url: 'https://your-server-upload-url.com', // 上传接口地址
filePath: compressedFilePath,
name: 'file',
formData: {
user: 'test'
},
success: (uploadFileRes) => {
console.log('上传成功', uploadFileRes);
},
fail: (err) => {
console.error('上传失败', err);
}
});
},
fail: (err) => {
console.error('压缩失败', err);
}
});
},
fail: (err) => {
console.error('选择图片失败', err);
}
});
注意事项
- 确保服务器支持接收的文件类型和大小。
- 根据实际需求调整
Compressor
的配置,比如quality
、maxSizeMB
等。 - 考虑到兼容性问题,确保
compressorjs
在目标平台上能够正常工作。 - 在生产环境中,应处理好错误处理和用户提示,以提升用户体验。
通过上述方法,你可以有效地解决从其他软件保存的原图图片无法上传的问题。