uni-app uni-file-picker离线状态无法使用

uni-app uni-file-picker离线状态无法使用

测试过的手机

  • 苹果7Plus
  • 华为P30Pro

操作步骤

  1. 手机断开网络;
  2. 手机连接电脑;
  3. HBuilderX点击运行菜单,运行到手机;
  4. 页面中点击uni-file-picker

预期结果

弹出选择相机或是相册的选项,用户可进入选择页面进行照片选择

实际结果

页面无响应,控制台输出错误

bug描述

手机断开网络之后,点击uni-file-picker组件,页面无响应,无法打开选择页面,在控制台输出错误:

  • 安卓报错:选择失败, Error: request:fail abort statusCode:-1 Unable to resolve host “api.next.bspapp.com”: No address associated with hostname at uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue:383
  • 苹果报错:选择失败, Error: request:fail abort statusCode:-1 似乎已断开与互联网的连接。(-1009) at uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue:383

更多关于uni-app uni-file-picker离线状态无法使用的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

貌似修改uni-file-picker内置组件的源码,可以在项目绑定服务空间情况下,选择照片不请求https://api.next.bspapp.com/client接口,断网就没问题了

更多关于uni-app uni-file-picker离线状态无法使用的实战教程也可以访问 https://www.itying.com/category-93-b0.html


非常感谢提供帮助,感觉官方不太在意我们提出的问题……

回复 sinovel: 同感

各位uniApp官方人员,看到之后麻烦请给个答复,项目上线急需解决问题

这个问题是无法解决吗?还是怎么回事?为什么这么久了没有一个官方人员响应呢? @DCloud 插件市场 @Dcloud @DCloud移动团队

uni-file-picker 是 uni-app 提供的一个文件选择组件,通常用于在移动端或 H5 环境中选择文件。如果在离线状态下无法使用 uni-file-picker,可能是由于以下原因:

1. 网络依赖

  • uni-file-picker 在某些情况下可能依赖于网络请求,例如从服务器获取文件列表或进行文件上传。如果网络不可用,可能会导致组件无法正常工作。
  • 解决方案:确保组件在离线状态下不需要进行网络请求。如果必须依赖网络,可以考虑缓存数据或提供离线模式。

2. 权限问题

  • 在移动端,uni-file-picker 需要访问设备的文件系统。如果应用没有正确的文件访问权限,可能会导致组件无法使用。
  • 解决方案:确保应用已经获取了必要的文件访问权限。可以在 manifest.json 中配置相应的权限。

3. 平台兼容性

  • uni-file-picker 在不同平台上的表现可能有所不同。例如,在 H5 和微信小程序中,文件选择的方式可能不同。在离线状态下,某些平台可能不支持文件选择功能。
  • 解决方案:检查目标平台的文档,了解 uni-file-picker 在离线状态下的支持情况。如果平台不支持,可以考虑使用其他文件选择方式。

4. 缓存策略

  • 如果应用需要在离线状态下使用 uni-file-picker,可以考虑实现缓存策略,将文件列表或已选择的文件缓存在本地。
  • 解决方案:使用 uni-app 提供的本地存储功能(如 uni.setStorageSyncuni.getStorageSync)来缓存文件数据。

5. 自定义实现

  • 如果 uni-file-picker 在离线状态下无法满足需求,可以考虑自定义文件选择功能。例如,使用 <input type="file"> 来实现文件选择,并处理离线情况。
  • 解决方案:根据需求自定义文件选择逻辑,确保在离线状态下也能正常工作。

示例代码:

<template>
  <view>
    <button @click="chooseFile">选择文件</button>
    <view v-if="file">已选择文件: {{ file.name }}</view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      file: null
    };
  },
  methods: {
    chooseFile() {
      const input = document.createElement('input');
      input.type = 'file';
      input.onchange = (e) => {
        const file = e.target.files[0];
        this.file = file;
        // 处理离线状态下的文件
      };
      input.click();
    }
  }
};
</script>
回到顶部