当前位置: 首页 > news >正文

英国做电商网站有哪些方面酒类网站建设方案

英国做电商网站有哪些方面,酒类网站建设方案,wordpress页面显示分类文章列表,平面设计培训要多久背景 文件管理页面,后端只提供了一个根据 file_path 和 file_name 参数下载文件的API接口。产品需要支持用户多选之后的批量下载功能。 技术实现 基础代码 先调用下载接口,获取到二进制的文件流,然后通过 a 标签完成下载。 // return [r…

背景

文件管理页面,后端只提供了一个根据 file_pathfile_name 参数下载文件的API接口。产品需要支持用户多选之后的批量下载功能。

技术实现

基础代码

先调用下载接口,获取到二进制的文件流,然后通过 a 标签完成下载。

// @return [response, error] 如果请求失败,则 error 有值,response 为null,否则 error 为null
const requestNormalFn = (url, method, data, {params = {}, requestConfig = {}, unitModuleName = null, deleteWithBody = false
} = {}) => {const requestUuid = genUuid()const reqBody = (method === 'delete' && !deleteWithBody) ? null : datareturn wrapAwait(myFetch.request({method, url, data: reqBody, params, requestConfig, requestUuid, unitModuleName}))
}// 通过 click a 标签下载文件
let downloadcount = 1
const saveDataToFileForHdf = (data, filename, ext) => {downloadcount ++let url = URL.createObjectURL(data);let link = document.createElement('a');link.setAttribute('href', url);link.setAttribute('download', `${filename}.${ext}`);link.addEventListener('click', function (e) {console.log('click', downloadcount, e.target)})document.body.appendChild(link);link.click();document.body.removeChild(link);
};

方案一

循环选中的行,在循环中调用下载文件的接口

const downloadFile = async row => {const [response, error] = await requestNormalFn(downloadUrl, 'get', null, {params: {file_path: row.file_path,file_name: row.file_name},requestConfig: {responseType: 'blob'}})if (error) {ElMessage({type: 'error',message: `${row.file_name}下载失败`})return}const fileNameArr = row.file_name.split('.')const ext = fileNameArr.splice(fileNameArr.length - 1, 1)const fileName = fileNameArr.join('.')saveDataToFileForHdf(response, fileName, ext[0])
}const onBatchDownloadClick = rows => {rows.forEach(row => downloadFile(row))
}

问题
当勾选的数据 >= 6时,就开始出现实际下载下来的文件数量小于勾选的数据量,能下载下来的文件数不稳定。

思考
有以下可能:

  1. 请求结果丢失 —— 后续验证被排除,没有丢失。
  2. 生成 a 标签的时候,click 这里被某种安全策略阻止 —— 后续证明,click 里面都能被打印出来。

所以那么最后只能指向下载文件的问题,查阅之后知道浏览器有安全策略,如果下载操作过于频繁或者数量过多,仍可能被视为不安全的操作而被阻止。

方案二

const requestFile = async row => {const [res, err] = await requestNormalFn(downloadUrl, 'get', null, {params: {file_path: row.file_path,file_name: row.file_name},requestConfig: {responseType: 'blob'}})return [res, err, row]
}const batchDownload = async (rows) => {const requestList = rows.map(row => requestFile(row))const resList = await Promise.allSettled(requestList)resList.forEach(res => {const [response, error, row] = res.valueif (error) {failedList.value.push(row.file_name)return}const fileNameArr = row.file_name.split('.')const ext = fileNameArr.splice(fileNameArr.length - 1, 1)const fileName = fileNameArr.join('.')saveDataToFileForHdf(response, fileName, ext[0])})if (failedList.value.length) {ElMessage({message: `${failedList.value.join(', ')} 下载失败。`,type: 'error'})}return [0, null]
}// 将长数组分片,进行处理
const dealPartForArray = async (list, cb, batchLength = 10) => {const splitNum = Math.ceil(list.length / batchLength)for (let i = 0; i < splitNum; i++) {const splitList = list.slice(i * batchLength, (i + 1) * batchLength)const [, err] = await cb(splitList)}
}
// 点击批量下载按钮的时候,将 选中的行 分片处理,每片最多6个数据
const onBatchDownloadClick = rows => {dealPartForArray(rows, batchDownload, 6)
}

这里最好wait一点时间之后,再执行下一个分片的下载。可以解决问题。但是提示信息需要优化,考虑一次的用户操作,更友好的提示用户。

方案三

交由后端处理,让后端提供批量下载的接口,这里要考虑到当批量下载回来的数据很大时,前端和后端需要做的事情。(下载压缩文件,以及返回数据的分片)

总结

最好是用方案三,如果后端不支持的话,再考虑方案二。

http://www.yayakq.cn/news/912000/

相关文章:

  • 知名网站建设多少钱泰国做企业网站
  • WordPress代码显示器网站的优化推广方案
  • 做点小本意 哪个网站拿货便宜点新浪博客 wordpress
  • 网站备案取消接入为什么我的网站备案通过还是显示未备案
  • 高网站建设寻乌网站建设
  • 做电子书的网站很有名后来被关闭了石家庄网络营销
  • 汕头制作公司网站爱站关键词挖掘工具
  • 做一个静态网站多少钱做标志的好网站
  • 企业网站ui模板下载手机怎么在百度上发布信息
  • 地税局网站建设情况汇报做暧昧免费视频大全网站
  • 在线定制网站官网金融理财网站建设方案
  • 电子商务网站建设选择服务器要考虑的因素有域名备案查询 网站备案查询
  • 西宁网站建设报价cu君博規范oppo软件商店
  • 东莞建网站服务设计图片模板
  • 中山哪里有好网站建设公司易语言如何做浏网站
  • 政务网站的建设原则小程序开发平台排名
  • 优秀品牌形象设计案例seo网络优化专员是什么意思
  • 聊城网站推广html5黑色网站
  • 个人建网站允许吗wordpress瀑布流网店
  • 企业网站系统详细设计php网站文件下载怎么做
  • 长沙需要做网站的企业iis7 网站无法显示该页面
  • 望京做网站智慧团建官网登录网址
  • 个人网站域名注册深圳品牌包装设计公司
  • flash网站as前台登录 wordpress
  • 网站建设行业的前景工业产品设计专业
  • 宁波网站公司企业网站做凭安认证有用吗
  • a最先基智网站建设百度有网站建设吗
  • 做旅游网站犯法吗网站色彩
  • 静态网站怎么做百度推广咸阳网站建设有哪些
  • 做境外旅游的网站百度推广渠道代理