vue上传本地文件,或把base64文件下载展示

这篇博客介绍了如何使用JavaScript实现图片的上传和下载功能。通过FileReader API读取本地图片为Base64编码,然后将Base64转换为Blob对象,最后创建一个隐藏的下载链接实现图片的本地下载。这是一个关于前端开发中图片处理的基础教程。
摘要由CSDN通过智能技术生成
 <input type="file" name ref="ipt" @change="uploading" accept="image/png" id />

      //this.url就是你当前的图片,可以进行展示
  uploading() {
      var rd = new FileReader();
      //this.$refs.ipt.files[0]上传服务器的时候,一般传递的就是这个
      rd.readAsDataURL(this.$refs.ipt.files[0]);
      let that = this;
      rd.onloadend = function () {
        that.url = this.result;
      };
    },

//上面是将本地图片改编成成base64图片

//第一个参数是地址,第二个参数是名称  
 downloadFile(content, fileName) {
      //下载base64图片
      var base64ToBlob = function (code) {
        let parts = code.split(";base64,");
        let contentType = parts[0].split(":")[1];
        let raw = window.atob(parts[1]);
        let rawLength = raw.length;
        let uInt8Array = new Uint8Array(rawLength);
        for (let i = 0; i < rawLength; ++i) {
          uInt8Array[i] = raw.charCodeAt(i);
        }
        return new Blob([uInt8Array], {
          type: contentType,
        });
      };
      let aLink = document.createElement("a");
      let blob = base64ToBlob(content); //new Blob([content]);
      let evt = document.createEvent("HTMLEvents");
      evt.initEvent("click", true, true); //initEvent 不加后两个参数在FF下会报错  事件类型,是否冒泡,是否阻止浏览器的默认行为
      aLink.download = fileName;
      aLink.href = URL.createObjectURL(blob);
      aLink.click();
    },

 //上面是将base64图片下载到本地

可以通过以下步骤实现: 1. 安装 `xlsx` 和 `file-saver` 库: ```bash npm install xlsx file-saver --save ``` 2. 在 Vue3 的 TypeScript 项目中创建一个组件: ```vue <template> <div> <input type="file" ref="fileInput" @change="handleFileChange"> <button @click="exportExcel">导出 Excel</button> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; import * as XLSX from 'xlsx'; import { saveAs } from 'file-saver'; export default defineComponent({ data() { return { workbook: null as XLSX.WorkBook | null, }; }, methods: { async handleFileChange(event: Event) { const target = event.target as HTMLInputElement; const files = target.files; if (files && files.length > 0) { const file = files[0]; const reader = new FileReader(); reader.onload = (e) => { const data = e.target?.result as ArrayBuffer; const workbook = XLSX.read(data, { type: 'array' }); this.workbook = workbook; }; reader.readAsArrayBuffer(file); } }, async exportExcel() { if (this.workbook) { const wbout = XLSX.write(this.workbook, { bookType: 'xlsx', type: 'array' }); const blob = new Blob([wbout], { type: 'application/octet-stream' }); saveAs(blob, 'example.xlsx'); } }, }, }); </script> ``` 3. 在 `handleFileChange` 方法中,读取上传的 Excel 文件,并将其解析为 `XLSX.WorkBook` 对象,保存到组件的 `workbook` 数据中。 4. 在 `exportExcel` 方法中,将 `workbook` 对象导出为 Excel 文件,通过 `saveAs` 方法保存到本地。 5. 使用 `input` 元素上传 Excel 文件,点击按钮导出 Excel 文件。 注意:由于浏览器的安全限制,不能直接使用 JavaScript 访问本地文件系统,只能通过 `input` 元素上传文件。另外,导出 Excel 文件需要使用第三方库 `xlsx` 和 `file-saver`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值