uniapp微信小程序-上传文件(支持图片和其他文件等),一次性获得最终返回值

uniapp-微信小程序-上传文件

javascript 复制代码
<!-- 上传文件(自定义文件类型) -->
<template>
  <view class="upload-file-contarner" @click="handleUploadFile"> + </view>
</template>

<script>
export default {
  components: {},
  props: {
    //接受的附件格式
    types: {
      type: String,
      default: () => '.png,.jpg,.jpeg,.pdf,.doc,.docx,.xls,.xlsx',
    },
    //最多上传几个文件
    maxFile: {
      type: Number,
      default: 5,
    },
  },
  data() {
    return {};
  },
  methods: {
    handleUploadFile() {
      const types = this.types.split(',');
      //由于平台提供的方法只兼容app和H5,所以微信小程序使用该方法,唤起微信聊天框选择文件
      wx.chooseMessageFile({
        count: this.maxFile, //默认100
        extension: types,
        success: async (res) => {
          const files = res.tempFiles;
          const processResultFiles = async () => {
            const promise = files.map(async (v) => {
              return await this.asyncResultFiles(v);
            });
            return await Promise.all(promise);
          };
          //最终我们需要的接口返回的数据集合
          const processArr = await processResultFiles();
          this.$emit('handleUploadFile', processArr);
        },
        fail: (err) => {
          // 用户取消选择文件或选择文件失败的回调函数
          throw err;
        },
      });
    },
    //异步配合Promise.all可以一次性拿到最终的结果
    asyncResultFiles(item) {
      return new Promise(async (resolve) => {
        const result = await this.uploadFilePromise(item.path);
        const res = JSON.parse(result);
        if (res.code === '00000') {
          resolve(res.data);
        }
      });
    },
    //异步返回接口的结果
    uploadFilePromise(filePath) {
      return new Promise((resolve, reject) => {
        uni.uploadFile({
          // #ifndef H5
          url: `${process.env.VUE_APP_BACK_URL}/nqi/file/uploadTopfs`,
          // #endif
          // #ifdef H5
          url: `${process.env.VUE_APP_BASE_URL}/nqi/file/uploadTopfs`,
          // #endif
          filePath: filePath,
          name: 'file',
          header: {
            'top-token': uni.getStorageSync('top-token'),
          },
          success: (res) => {
            resolve(res.data);
          },
          fail: (err) => {
            reject(err);
          },
        });
      });
    },
  },
};
</script>
<style scoped lang="scss">
.upload-file-contarner {
  cursor: pointer;
  width: 100%;
  height: 80rpx;
  font-size: 50rpx;
  text-align: center;
  line-height: 80rpx;
  border: 1px solid $u-light-color;
  color: $u-light-color;
  margin-bottom: 20rpx;
  margin-top: 20rpx;
}
</style>
相关推荐
2501_9159090616 分钟前
tcpdump 抓包数据分析实战,命令、过滤、常见故障定位与真机补充流程
网络·测试工具·ios·小程序·uni-app·iphone·tcpdump
赵庆明老师5 小时前
Uniapp微信小程序开发:微信小程序支付功能后台代码
微信小程序·小程序·uni-app
曹申阳5 小时前
1. 使用VSCode开发uni-app环境搭建
ide·vscode·uni-app
雪芽蓝域zzs6 小时前
uniapp开发 APP嵌入另一个APP打包的wgt文件,实现点击携带参数跳转到wgtAPP的某一个页面
uni-app·apache
00后程序员张7 小时前
tcpdump 抓包分析,命令、过滤技巧、常见症状定位与移动真机补充方案
网络·测试工具·ios·小程序·uni-app·iphone·tcpdump
BumBle9 小时前
基于UniApp实现DeepSeek AI对话:流式数据传输与实时交互技术解析
前端·uni-app
会点法律的程序员9 小时前
小程序 地理位置授权怎么搞
前端·小程序·uni-app
重生之我是菜鸡程序员10 小时前
uniapp 顶部通知 上滑隐藏
前端·javascript·uni-app
FliPPeDround10 小时前
告别 uni-app 启动烦恼:@uni-helper/unh 让开发流程更顺畅
前端·微信小程序·uni-app
2501_9159214313 小时前
iOS 26 电耗监测与优化,耗电问题实战 + 多工具 辅助策略
android·macos·ios·小程序·uni-app·cocoa·iphone