比钢筋还硬的硬货-单文件、多文件、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

相关文章

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更

详解Vue如何使用xlsx库导出Excel文件

《详解Vue如何使用xlsx库导出Excel文件》第三方库xlsx提供了强大的功能来处理Excel文件,它可以简化导出Excel文件这个过程,本文将为大家详细介绍一下它的具体使用,需要的小伙伴可以了解... 目录1. 安装依赖2. 创建vue组件3. 解释代码在Vue.js项目中导出Excel文件,使用第三

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

Python实现将实体类列表数据导出到Excel文件

《Python实现将实体类列表数据导出到Excel文件》在数据处理和报告生成中,将实体类的列表数据导出到Excel文件是一项常见任务,Python提供了多种库来实现这一目标,下面就来跟随小编一起学习一... 目录一、环境准备二、定义实体类三、创建实体类列表四、将实体类列表转换为DataFrame五、导出Da

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档

使用Python处理CSV和Excel文件的操作方法

《使用Python处理CSV和Excel文件的操作方法》在数据分析、自动化和日常开发中,CSV和Excel文件是非常常见的数据存储格式,ython提供了强大的工具来读取、编辑和保存这两种文件,满足从基... 目录1. CSV 文件概述和处理方法1.1 CSV 文件格式的基本介绍1.2 使用 python 内