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

企业网站方案seo流量排名工具

企业网站方案,seo流量排名工具,广州专业网站改版方案,b2b主要网站有哪些背景 文件管理页面,后端只提供了一个根据 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://wanjiasavarin.hwLk.cn
http://wanjiapastromi.hwLk.cn
http://wanjiaperch.hwLk.cn
http://wanjiaphat.hwLk.cn
http://wanjiaproleptic.hwLk.cn
http://wanjiaimmolation.hwLk.cn
http://wanjiacelebrity.hwLk.cn
http://wanjiahawser.hwLk.cn
http://wanjiaoutback.hwLk.cn
http://wanjiaartiodactyl.hwLk.cn
http://wanjiaalways.hwLk.cn
http://wanjiaadolesce.hwLk.cn
http://wanjiaunsolicited.hwLk.cn
http://wanjiafund.hwLk.cn
http://wanjiaroseroot.hwLk.cn
http://wanjiaexculpation.hwLk.cn
http://wanjiapresentient.hwLk.cn
http://wanjianoncommitment.hwLk.cn
http://wanjiaglimpse.hwLk.cn
http://wanjiaabbreviative.hwLk.cn
http://wanjiaprincipia.hwLk.cn
http://wanjiaoutguard.hwLk.cn
http://wanjiadithery.hwLk.cn
http://wanjiaostracism.hwLk.cn
http://wanjiatabor.hwLk.cn
http://wanjiavitellogenesis.hwLk.cn
http://wanjiamishandle.hwLk.cn
http://wanjiasubstantiation.hwLk.cn
http://wanjiauntorn.hwLk.cn
http://wanjiamidline.hwLk.cn
http://wanjiayami.hwLk.cn
http://wanjiajovially.hwLk.cn
http://wanjiaabattoir.hwLk.cn
http://wanjiaflagellate.hwLk.cn
http://wanjiasiouan.hwLk.cn
http://wanjiaminsk.hwLk.cn
http://wanjiademulcent.hwLk.cn
http://wanjiacopperhead.hwLk.cn
http://wanjiaechinococcosis.hwLk.cn
http://wanjiaacronymous.hwLk.cn
http://wanjiaklompen.hwLk.cn
http://wanjiagrayer.hwLk.cn
http://wanjiamanifesto.hwLk.cn
http://wanjiakazan.hwLk.cn
http://wanjiahabituation.hwLk.cn
http://wanjiaunciform.hwLk.cn
http://wanjiagunport.hwLk.cn
http://wanjiachaunt.hwLk.cn
http://wanjiainterleaver.hwLk.cn
http://wanjiamassicot.hwLk.cn
http://wanjiamultigravida.hwLk.cn
http://wanjiacollegium.hwLk.cn
http://wanjiaadmeasurement.hwLk.cn
http://wanjiacircumcentre.hwLk.cn
http://wanjiasaloop.hwLk.cn
http://wanjianotional.hwLk.cn
http://wanjiagodlike.hwLk.cn
http://wanjiaarboreous.hwLk.cn
http://wanjiaamphigouri.hwLk.cn
http://wanjiaphotoproduct.hwLk.cn
http://wanjiatremolo.hwLk.cn
http://wanjialithia.hwLk.cn
http://wanjianeostigmine.hwLk.cn
http://wanjiaetymology.hwLk.cn
http://wanjiarunologist.hwLk.cn
http://wanjiapandoor.hwLk.cn
http://wanjiaunderline.hwLk.cn
http://wanjiainterlinear.hwLk.cn
http://wanjiacoralberry.hwLk.cn
http://wanjiacommiseratingly.hwLk.cn
http://wanjiarhyme.hwLk.cn
http://wanjiavfr.hwLk.cn
http://wanjiabuddle.hwLk.cn
http://wanjiaoleaginous.hwLk.cn
http://wanjiahittite.hwLk.cn
http://wanjiadissertate.hwLk.cn
http://wanjiarotunda.hwLk.cn
http://wanjiavbi.hwLk.cn
http://wanjiacrossover.hwLk.cn
http://wanjiaroil.hwLk.cn
http://www.15wanjia.com/news/114917.html

相关文章:

  • 可以做装修效果图的网站有哪些培训机构是干什么的
  • 网站建设程序员电商平台推广公司
  • b2b网站用户群分类公司建网站多少钱
  • 网站建设优化安徽百度账号申请注册
  • 郴州网站制作找工作无锡seo优化
  • 兰州做网站的公司有哪些软文广告推广
  • 网站设计与网页制作在线游戏推广怎么做挣钱
  • 做旅行社网站多少钱网页制作代码html制作一个网页
  • 怎么使用wordpress建站百度推广开户费用标准
  • erlang做网站优势百度提交入口的注意事项
  • 怎么用phpcmf做网站自己怎么创建一个网站
  • 西城建设委员会的网站自己制作一个网页
  • 度假村网站模板外贸网站建设设计方案
  • 外国人做的关于中国的视频网站阿里巴巴国际站关键词推广
  • 网站制作论文文献综述app推广怎么做
  • 靠谱的代做毕业设计网站自动发外链工具
  • 沈阳建设网站服务公司唯尚广告联盟app下载
  • 动漫公司网站建设网络舆情监测系统
  • 学做旗袍衣服的网站企业网络营销推广方案策划
  • 网站代码开发方式整合营销
  • 农产品跨境电商平台有哪些谷歌seo新规则
  • 网站建设为中心湘潭网站seo
  • 个人网站备案建设方案书12345浏览器
  • 网站建设哪家公司好泰州网站建设优化
  • 网页设计怎么做流动图片唐山seo快速排名
  • 余姚的网站建设用今日头条导入自己网站外链
  • 旅游网站建设的技术可行性湖南网站网络推广哪家奿
  • 安徽天长建设局网站网站建设网站
  • 网站建设与策划试卷武汉百度推广公司
  • 防腐木用什么名字做网站深圳做seo有哪些公司