前端常用的上传下载文件的几种方式,直接上传、下载文件,读取.xlsx文件数据,导出.xlsx数据
一、通过调用接口下载文件
1.1根据文件流Blob进行下载
const onExport = async () => { try { let res = await axios.request({ method: 'POST', url: '请求地址', responseType: 'blob', params: { data: null }, headers: { Authorization: 'Bearer ' + UserModule.token },//看看请求是否需要token }); let reader = new FileReader(); let data = res.data; reader.onload = (e: any) => { try { let fileName = window.decodeURI( decodeURIComponent(decodeURI(res.headers['content-disposition'].split(`''`)[1])) ); let url = window.URL.createObjectURL(new Blob([data], { type: res.headers['content-type'] })); let link = document.createElement('a'); link.style.display = 'none'; link.href = url; link.setAttribute('download', fileName); document.body.appendChild(link); link.click(); document.body.removeChild(link); } catch (e: any) { message.error(e); } }; reader.readAsText(data); } catch (err) { message.error('导出失败'); } };
1.2根据下载文件链接直接进行下载
downloadFile(fileDownloadUrl) { const downloadLink = document.createElement("a"); downloadLink.href = fileDownloadUrl;//文件地址 // 设置下载文件的名称(可选) downloadLink.download = "yourFileName.ext"; // 将 元素添加到 DOM 中 document.body.appendChild(downloadLink); // 模拟点击触发下载 downloadLink.click(); // 从 DOM 中移除 元素 document.body.removeChild(downloadLink); }
二、将数组的对象数据导出到.xlsx文件中
fnExport() { let data = []; let temp = [ { name:'小周', sex:'男', nation:'汉族' }, { name:'小林', sex:'女', nation:'汉族' }, ] temp.forEach((item: models.ExpertEditModel) => { data.push({ 姓名: item.name, 性别: item.sex, 民族: item.nation, }); }); const ws = XLSX.utils.json_to_sheet(data); // 新建book const wb = XLSX.utils.book_new(); // 生成xlsx文件(book,sheet数据,sheet命名) XLSX.utils.book_append_sheet(wb, ws, '数据详情'); // 写文件(book,xlsx文件名称) XLSX.writeFile(wb, '基本信息.xlsx'); }
三、请求接口上传文件给后端
async beforeAvatarUpload(file: any, fList: any) { if (!file) { this.$message.error('请先添加文件'); } else { if (file) { try { const formData = new FormData(); formData.append('file', file); //await api.Organizations.EduUploadSchool_PostAsync(formData); // 发起POST请求 axios.request({ method: 'post', url: 'your_backend_url', data: formData, headers: { 'Content-Type': `multipart/form-data; boundary=${formData._boundary}`, // You might need other headers depending on your backend requirements } }) this.$message.success('上传成功'); } catch (err) { this.$message.error('上传失败:' + err.message); } } } }
四、读取用户上传的.xlsx文件内容转成数组
html
点击上传
async getExcelFile(file) { if (!/\.(xlsx)$/.test(file.name.toLowerCase())) { console.log("请上传.xlsx格式的Excel文件"); } else if (file) { try { const res = await this.readExcel(file);//调用解析.xlsx文件方法 } catch (error) { console.log("上传错误:", error); } } }, // 解析Excel readExcel(file) { return new Promise((resolve, reject) => { const reader = new FileReader();//创建FileReader对象,您可以将文件内容读取到内存中 let getExcelList = [];// 用于存储从Excel中提取的数据 reader.onload = (e) => { try { let data = e.target.result; let workbook = XLSX.read(data, { type: "binary" }); // 遍历工作表 for (let item in workbook.SheetNames) { let SheetName = workbook.SheetNames[item]; let sheetInfos = workbook.Sheets[SheetName]; // 将工作表内容转换为JSON格式 let excel = XLSX.utils.sheet_to_json(sheetInfos, { raw: true }); // 遍历每行数据并将特定字段添加到getExcelList数组中 excel.forEach((item) => { getExcelList.push({ name: item.姓名 ?? "", nation: item.民族 ?? "", school: item.学校 ?? "", }); }); } console.log( "%c [ getExcelList ]-53", "font-size:13px; background:pink; color:#bf2c9f;", getExcelList ); resolve(getExcelList);// 成功解析并处理Excel文件,返回getExcelList数组 } catch (e) { reject(e); } }; // console.log('teacherUploadList', teacherUploadList); reader.readAsBinaryString(file);// 以二进制字符串形式读取上传的Excel文件内容,解析成功则调用reader.onload函数 }); }
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理!
部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!
图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!