比钢筋还硬的硬货-单文件、多文件、excel文件下载

2023-12-19 16:40
文章标签 excel 下载 钢筋 硬货

本文主要是介绍比钢筋还硬的硬货-单文件、多文件、excel文件下载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 继上传图片、上传文件和处理文件格式之后,再继续又硬又干的干货单文件、多文件批量、excel下载完整版

注意:项目运用的是vue3框架,需要依赖axios、JSzip、FileSaver三个依赖包。缺一不可撒

  1. 安装三个依赖

npm install axios
npm install JSzip --save
npm install file-saver --save

  1. 创建FileHandle.js

  2. FileHandle.js具体代码

import { fetchFileUpload } from '@/services/common.js'
import JSZip from 'jszip'
import FileSaver from 'file-saver'
import axios from 'axios'
import { ItMessage } from '@/components'/*** 文件处理*/// 归类的文件类型
const fileTypes = ['word','excel','ppt','pdf','image','gif','video','zip',
]// 支持的文件格式 每组二维数组元素对应一种文件类型,例如:['doc', 'docx'] 对应 'word'
const fileFormatCollections = [['doc', 'docx'],['xls', 'xlsx'],['ppt', 'pptx'],['pdf'],['jpg', 'jpeg', 'png', 'bmp'],['gif'],['mp4'],['zip', 'rar', '7z'],
]
const fileFormatMap = {projectVerify: ['doc','docx','xls','xlsx','ppt','pptx','pdf','jpg','jpeg','gif','png','bmp','mp4',],
}export function FileHandle() {// 校验文件格式const getAcceptFileFormats = (key) =>fileFormatMap[key].map((format) => `.${format}`).join(',')// 文件下载const downloadFile = async (url, name) => {if (!name) {let { fileName } = parseFileUrl(url)name = fileName}FileSaver.saveAs(url, name)}// 批量压缩下载/**** @param {Array} fileTable 文件路径数组* @param {String} fileTableTitle 文件zip名称*/function getFile(url) {return new Promise((resolve, reject) => {axios({method: 'get',url,responseType: 'blob',}).then((data) => {resolve(data.data)}).catch((error) => {reject(error.toString())})})}function handleBatchDownload(fileTable, filename) {const dataUrl = []for (let file of fileTable) {dataUrl.push(file.url) // 把所有要打包文件的url放进数组}const zip = new JSZip() // 创建一个JSZip实例const cache = {}const promises = []dataUrl.forEach((item) => {const promise = getFile(item).then((data) => {const arr_name = item.split('/') // stringObject.split 将字符串分割成字符串数组const file_name = arr_name[arr_name.length - 1] // 获取文件名(数组最后一项)zip.file(file_name, data, { binary: true }) // 逐个添加文件cache[file_name] = data})promises.push(promise)})Promise.all(promises).then(() => {zip.generateAsync({ type: 'blob' }).then((content) => {downloadFile(content, filename + '.zip')})})}// 判断上传文件类型是否在范围const applyArr = (arr, file) => {return new Promise((resolve, reject) => {//二维数组转一维数组let newArr = [].concat.apply([], arr)//文件类型let fileType = file.name.split('.')[file.name.split('.').length - 1]if (newArr.indexOf(fileType) == -1) {ItMessage({ content: '不支持该类型文件上传' })reject(false)} else {resolve(true)}})}// 文件上传const handleUploadFile = async (file) => {await applyArr(fileFormatCollections, file)if (file.name.indexOf(',') != -1) {ItMessage({ content: '文件名中不能有","' })return false} else {let res = await fetchFileUpload(file)const { fileName, fileType } = parseFileUrl(res.data)const fileObj = {timeid: new Date().getTime(),name: fileName,path: res.data,type: fileType,}return fileObj}}// 图片上传const fetchPicUpload = async (file) => {if (file.name.indexOf(',') != -1) {ItMessage({ content: '图片名中不能有逗号' })return false} else {let res = await fetchFileUpload(file)const { fileName, fileType } = parseFileUrl(res.data)const fileObj = {timeid: new Date().getTime(),name: fileName,path: res.data,type: fileType,}return fileObj}}// 根据链接返回文件名称、类型// in: https:/***/xxx.pdf// out: { fileName, fileFormat, fileType }const parseFileUrl = (fileUrl) => {let fileName = fileUrlif (fileUrl.includes('/')) {const splitedFile = fileUrl.split('/')const splitedFileLength = splitedFile.lengthfileName = splitedFile[splitedFileLength - 1]}const splitedFileName = fileName.split('.')const fileFormat = splitedFileName[splitedFileName.length - 1]const getFileType = (fileFormat) => {const filtedFileIndex = fileFormatCollections.map((fileFormats, index) => {if (fileFormats.includes(fileFormat)) {return index}}).filter((item) => item >= 0)[0]return fileTypes[filtedFileIndex]}const fileType = getFileType(fileFormat)return { fileName, fileFormat, fileType }}// htmlExportExcelconst htmlExportExcel = ({ html, name }) => {const stylecss = `table{border: none;}table td {font-size: 12px;height: 30px;text-align: center;color: #000;}.textLeft {text-align: left;}table td.tishi{text-align: left;font-size: 10px;border: none;height: 20px;}.tablehead{font-size: 20px;}`const base64 = (s) => {return window.btoa(unescape(encodeURIComponent(s)))}const uri = 'data:application/vnd.ms-excel;base64,'let template = `<html xmlns:o="urn:schemas-microsoft-com:office:office"xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><style type="text/css"> ${stylecss}</style></head><body><table class="excelTable" cellspacing="0" cellpadding="0" border="1" >${html}</table><body></html>`downloadFile(uri + base64(template), `${name || '数据'}.xls`)}// jsonToDocreturn {getAcceptFileFormats,parseFileUrl, // 根据链接返回文件名称、类型htmlExportExcel, // 导出为excelhandleUploadFile, // 上传文件handleBatchDownload, // 批量压缩下载downloadFile, // 文件下载fetchPicUpload, //上传图片}
}

FileHandle.js中fetchFileUpload

在这里插入图片描述

这篇关于比钢筋还硬的硬货-单文件、多文件、excel文件下载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/512935

相关文章

C#借助Spire.XLS for .NET实现在Excel中添加文档属性

《C#借助Spire.XLSfor.NET实现在Excel中添加文档属性》在日常的数据处理和项目管理中,Excel文档扮演着举足轻重的角色,本文将深入探讨如何在C#中借助强大的第三方库Spire.... 目录为什么需要程序化添加Excel文档属性使用Spire.XLS for .NET库实现文档属性管理Sp

SpringBoot返回文件让前端下载的几种方式

《SpringBoot返回文件让前端下载的几种方式》文章介绍了开发中文件下载的两种常见解决方案,并详细描述了通过后端进行下载的原理和步骤,包括一次性读取到内存和分块写入响应输出流两种方法,此外,还提供... 目录01 背景02 一次性读取到内存,通过响应输出流输出到前端02 将文件流通过循环写入到响应输出流

C#实现将Excel工作表拆分为多个窗格

《C#实现将Excel工作表拆分为多个窗格》在日常工作中,我们经常需要处理包含大量数据的Excel文件,本文将深入探讨如何在C#中利用强大的Spire.XLSfor.NET自动化实现Excel工作表的... 目录为什么需要拆分 Excel 窗格借助 Spire.XLS for .NET 实现冻结窗格(Fro

使用Python实现高效复制Excel行列与单元格

《使用Python实现高效复制Excel行列与单元格》在日常办公自动化或数据处理场景中,复制Excel中的单元格、行、列是高频需求,下面我们就来看看如何使用FreeSpire.XLSforPython... 目录一、环境准备:安装Free Spire.XLS for python二、核心实战:复制 Exce

pandas批量拆分与合并Excel文件的实现示例

《pandas批量拆分与合并Excel文件的实现示例》本文介绍了Pandas中基于整数位置的iloc和基于标签的loc方法进行数据索引和切片的操作,并将大Excel文件拆分合并,具有一定的参考价值,感... 目录一、Pandas 进行索引和切编程片的iloc、loc方法二、Pandas批量拆分与合并Exce

使用C#导出Excel数据并保存多种格式的完整示例

《使用C#导出Excel数据并保存多种格式的完整示例》在现代企业信息化管理中,Excel已经成为最常用的数据存储和分析工具,从员工信息表、销售数据报表到财务分析表,几乎所有部门都离不开Excel,本文... 目录引言1. 安装 Spire.XLS2. 创建工作簿和填充数据3. 保存为不同格式4. 效果展示5

前端Visual Studio Code安装配置教程之下载、汉化、常用组件及基本操作

《前端VisualStudioCode安装配置教程之下载、汉化、常用组件及基本操作》VisualStudioCode是微软推出的一个强大的代码编辑器,功能强大,操作简单便捷,还有着良好的用户界面,... 目录一、Visual Studio Code下载二、汉化三、常用组件1、Auto Rename Tag2

Java轻松实现在Excel中插入、提取或删除文本框

《Java轻松实现在Excel中插入、提取或删除文本框》在日常的Java开发中,我们经常需要与Excel文件打交道,当涉及到Excel中的文本框时,许多开发者可能会感到棘手,下面我们就来看看如何使用J... 目录Java操作Excel文本框的实战指南1. 插入Excel文本框2. 提取Excel文本框内容3

C#借助Spire.XLS for .NET实现Excel工作表自动化样式设置

《C#借助Spire.XLSfor.NET实现Excel工作表自动化样式设置》作为C#开发者,我们经常需要处理Excel文件,本文将深入探讨如何利用C#代码,借助强大的Spire.XLSfor.N... 目录为什么需要自动化工作表样式使用 Spire.XLS for .NET 实现工作表整体样式设置样式配置

Python包管理工具uv下载python版本慢问题解决办法

《Python包管理工具uv下载python版本慢问题解决办法》uv是一个非常快的Python包和项目管理器,用Rust编写,使用热缓存安装Trio的依赖项的速度对比,:本文主要介绍Python包... 目录发现问题对于 MACOS / linux 用户 (zsh/bash):对于 Windows 用户:总