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

相关文章

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.

使用C#删除Excel表格中的重复行数据的代码详解

《使用C#删除Excel表格中的重复行数据的代码详解》重复行是指在Excel表格中完全相同的多行数据,删除这些重复行至关重要,因为它们不仅会干扰数据分析,还可能导致错误的决策和结论,所以本文给大家介绍... 目录简介使用工具C# 删除Excel工作表中的重复行语法工作原理实现代码C# 删除指定Excel单元

Python实现pdf电子发票信息提取到excel表格

《Python实现pdf电子发票信息提取到excel表格》这篇文章主要为大家详细介绍了如何使用Python实现pdf电子发票信息提取并保存到excel表格,文中的示例代码讲解详细,感兴趣的小伙伴可以跟... 目录应用场景详细代码步骤总结优化应用场景电子发票信息提取系统主要应用于以下场景:企业财务部门:需

Python处理大量Excel文件的十个技巧分享

《Python处理大量Excel文件的十个技巧分享》每天被大量Excel文件折磨的你看过来!这是一份Python程序员整理的实用技巧,不说废话,直接上干货,文章通过代码示例讲解的非常详细,需要的朋友可... 目录一、批量读取多个Excel文件二、选择性读取工作表和列三、自动调整格式和样式四、智能数据清洗五、

Python Pandas高效处理Excel数据完整指南

《PythonPandas高效处理Excel数据完整指南》在数据驱动的时代,Excel仍是大量企业存储核心数据的工具,Python的Pandas库凭借其向量化计算、内存优化和丰富的数据处理接口,成为... 目录一、环境搭建与数据读取1.1 基础环境配置1.2 数据高效载入技巧二、数据清洗核心战术2.1 缺失

利用Python实现Excel文件智能合并工具

《利用Python实现Excel文件智能合并工具》有时候,我们需要将多个Excel文件按照特定顺序合并成一个文件,这样可以更方便地进行后续的数据处理和分析,下面我们看看如何使用Python实现Exce... 目录运行结果为什么需要这个工具技术实现工具的核心功能代码解析使用示例工具优化与扩展有时候,我们需要将

python如何下载网络文件到本地指定文件夹

《python如何下载网络文件到本地指定文件夹》这篇文章主要为大家详细介绍了python如何实现下载网络文件到本地指定文件夹,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...  在python中下载文件到本地指定文件夹可以通过以下步骤实现,使用requests库处理HTTP请求,并结合o

通过C#获取Excel单元格的数据类型的方法详解

《通过C#获取Excel单元格的数据类型的方法详解》在处理Excel文件时,了解单元格的数据类型有助于我们正确地解析和处理数据,本文将详细介绍如何使用FreeSpire.XLS来获取Excel单元格的... 目录引言环境配置6种常见数据类型C# 读取单元格数据类型引言在处理 Excel 文件时,了解单元格