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

做网站要签合同吗网站黑链

做网站要签合同吗,网站黑链,长沙网站建设案例,jsp个人网站设计背景 文件管理页面#xff0c;后端只提供了一个根据 file_path 和 file_name 参数下载文件的API接口。产品需要支持用户多选之后的批量下载功能。 技术实现 基础代码 先调用下载接口#xff0c;获取到二进制的文件流#xff0c;然后通过 a 标签完成下载。 // return [r…背景 文件管理页面后端只提供了一个根据 file_path 和 file_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时就开始出现实际下载下来的文件数量小于勾选的数据量能下载下来的文件数不稳定。 思考 有以下可能 请求结果丢失 —— 后续验证被排除没有丢失。生成 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.tj-hxxt.cn/news/136343.html

相关文章:

  • 胶东国际机场建设有限公司网站邯郸媒体网络营销诚信合作
  • 重庆市建设工程信息网站哪些网站教你做美食的
  • 关闭网站跳转代码亳州网站制作公司
  • 企业可以做哪些网站有哪些内容吗zencart网站建设
  • 网站建设招标文件技术部分纺织面料做哪个网站好
  • 如何取一个大气的名字的做网站平台公司的定义
  • 多终端网站百度关键词分析工具
  • 固原住房和城乡建设厅网站伊犁州建设局网站
  • 商业摄影网站wordpress 文章截断
  • 杭州建设局网站首页 柳免费制作主图的网站
  • 潍坊汇聚网站3a汽车集团公司网络营销方案
  • 无锡网站制作工具苏州网站制作网络建设公司
  • 网站会员功能介绍自己网站视频直播怎么做
  • 怎么用dw建设网站德州网站建设德州
  • 仙居做网站在哪里做网站建设公司 云智互联
  • 网站如何提高用户量网站建设服务器价格
  • 免费手机个人网站seo发布网站
  • 景观网站建设wordpress 改模板目录
  • 电影网站怎么做平面设计师网站都有哪些
  • 莲湖微网站建设如何注册公司费用
  • 自媒体运营小程序开发网站建设博客社区类网站模板下载
  • 短视频营销推广方式搜索引擎排名优化seo课后题
  • 怎么建设手机端网站如何防止网站被镜像
  • 阿里云虚拟主机建站教程中国做的最好的网站建设公司
  • 代做网站app苏州企业网站建站系统
  • 网站建设公司的市场营销方案无锡企业网站排名优化
  • 网站推广该怎么做网站建设推广服务商
  • 做网站怎么在图片里面插字重庆工程交易信息网
  • 源码怎么做网站中国娱乐公司三大巨头
  • 湛江网站建设湛江wordpress 301