uni-app uni.chooseImage 选择从其他软件保存的原图图片不能上传

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app uni.chooseImage 选择从其他软件保存的原图图片不能上传

操作步骤:

1

预期结果:

1

实际结果:

1

bug描述:

上传图片是空白的,我目前复现只能在手机上,所以不太好排查问题。请问有哪位遇到次问题了

img

信息类别 信息内容
产品分类 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 的配置,比如 qualitymaxSizeMB 等。
  • 考虑到兼容性问题,确保 compressorjs 在目标平台上能够正常工作。
  • 在生产环境中,应处理好错误处理和用户提示,以提升用户体验。

通过上述方法,你可以有效地解决从其他软件保存的原图图片无法上传的问题。

回到顶部