uni-app 使用uni-file-picker组件手机端上传图片时图片上传进度卡住 电脑端上传正常

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

uni-app 使用uni-file-picker组件手机端上传图片时图片上传进度卡住 电脑端上传正常

操作步骤:

  • 使用uni-file-picker组件手机端上传图片(iOS和安卓都一样)

预期结果:

  • 图片选择后能够正常上传展示在编辑框中

实际结果:

  • 上传进度受阻,无法上传

bug描述:

  • 使用uni-file-picker组件手机端上传图片,图片上传进度会被卡住,使用电脑端上传就正常上传成功,请问下这是为什么呢

图片

信息类型 信息内容
产品分类 uniapp/小程序/微信
PC开发环境 Windows
PC开发环境版本 win11家庭版 22621.2428
HBuilderX 4.24
第三方工具 1.06.2409182 win32-x64
基础库版本 3.5.8
项目创建方式 CLI
CLI版本 4.28.2024092105-alpha

2 回复

你好,你手机端是使用什么测试的?微信小程序吗?后台配置服务器域名了吗?


在处理 uni-app 中使用 uni-file-picker 组件在手机端上传图片时图片上传进度卡住的问题时,我们首先需要确保几个关键方面:组件的使用方式正确、上传逻辑合理、以及处理可能的错误和异常。由于电脑端上传正常,问题很可能与手机端的特定环境或配置有关。以下是一个简化的代码示例,用于展示如何使用 uni-file-picker 组件进行图片上传,并包含一些基本的错误处理逻辑。

<template>
  <view>
    <uni-file-picker
      :files="files"
      :count="count"
      :mode="mode"
      @change="handleFileChange"
      @error="handleError"
    />
    <button @click="uploadFiles">上传</button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      files: [], // 存储选中的文件
      count: 9, // 限制选择的文件数量
      mode: ['image'], // 限制只能选择图片
    };
  },
  methods: {
    handleFileChange(e) {
      this.files = e.detail.files; // 获取选中的文件
    },
    handleError(e) {
      console.error('文件选择出错:', e);
      uni.showToast({
        title: '文件选择出错',
        icon: 'none',
      });
    },
    async uploadFiles() {
      if (this.files.length === 0) {
        uni.showToast({
          title: '请先选择文件',
          icon: 'none',
        });
        return;
      }

      for (let file of this.files) {
        const uploadTask = uni.uploadFile({
          url: 'https://your-upload-url.com/upload', // 替换为你的上传接口
          filePath: file.path,
          name: 'file',
          formData: {
            user: 'test'
          },
          success: (uploadFileRes) => {
            console.log('上传成功:', uploadFileRes);
          },
          fail: (err) => {
            console.error('上传失败:', err);
            uni.showToast({
              title: '上传失败',
              icon: 'none',
            });
          },
          complete: (res) => {
            if (res.statusCode !== 200) {
              console.error('服务器响应错误:', res);
            }
          }
        });

        uploadTask.onProgressUpdate((res) => {
          console.log('上传进度:', res.progress);
          // 这里可以添加进度条显示逻辑
        });
      }
    },
  },
};
</script>

在这个示例中,我们使用了 uni-file-picker 组件来选择文件,并通过 @change 事件获取选中的文件列表。uploadFiles 方法用于上传选中的文件,使用了 uni.uploadFile API,并在上传过程中监听进度更新。

如果手机端上传卡住,可能的原因包括但不限于:

  • 网络问题:检查手机网络状态,确保网络稳定。
  • 服务器响应:确保服务器端能正确处理上传请求,并返回正确的响应。
  • 文件大小限制:检查服务器是否有文件大小限制,以及客户端是否遵守这些限制。
  • 权限问题:确保应用有访问文件系统和网络的权限。

在实际应用中,根据具体情况可能需要进一步调试和优化。

回到顶部