electron-vue打开文件夹选中多张图片发送给后台的实现

目标: 后台提供了一个上传图片的接口,如果要同时上传多张图片,需要将图片转换成base64,然后用数组格式进行上传。
文中用到的基本功能:
1、electron的打开文件夹功能。相关api是dialog
2、nodefs模块。
3、element-ui的图片预览组件。组件是el-image
具体流程:
1、上传图集按钮

<el-button size="mini" type="warning" @click="uploadClick">上传图集</el-button>

2、打开文件夹对话框,以及将图片转成base64格式的代码。

 // 上传图集
    uploadClick() {
      dialog.showOpenDialog(
        {
          filters: [{ name: 'Images', extensions: ['jpg', 'png', 'gif'] }],
          properties: ['openFile', 'multiSelections'] // 可以选择文件且可以多选
        },
        (result) => {
          if (result && result.length > 0) {
            // 返回的result是一个图片路径的数组
            result.forEach((item) => {
              fs.readFile(item, (err, data) => {
                if (err) throw err
                let file = new File([data], 'tem.jpg', { type: 'image/jpg' })
                // 将图片转成base64
                let reader = new FileReader()
                reader.readAsDataURL(file)
                reader.onload = (e) => {
                  // push进数组进行展示
                  this.srcList.push(e.target.result)
                }
              })
            })
          }
        }
      )
    }

3、展示图片的代码,用的是element-ui

<el-image style="width: 100px; height: 100px" :src="url" :preview-src-list="srcList">
</el-image>

最后: 现在srcList里面保存的即是base64格式的图片数组。可以直接调用接口进行上传。
总结: 基本思想是将图片选中后通过fs读取进来,然后先转换成base64进行显示,最后统一上传。显示和上传得分两步进行,因为转base64fs读取图片都是异步操作,必须先将图片全部读取显示后,才能实现一次性上传。而且先显示,可以预览或者对选错的图片进行删除操作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值