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

java网站开发需要哪些基础网络营销管理办法

java网站开发需要哪些基础,网络营销管理办法,wordpress菜单滑动,广告网站建设用 JavaScript 的 axios 实现文件下载功能,咱们要分几个步骤来搞定它!最主要的部分是处理 二进制数据,可以生成一个进度检测,然后把它保存为文件。 文件名的获取二进制数据获取创建下载链接 const axios require(axios);const g…

用 JavaScript 的 axios 实现文件下载功能,咱们要分几个步骤来搞定它!最主要的部分是处理 二进制数据,可以生成一个进度检测,然后把它保存为文件。

  • 文件名的获取
  • 二进制数据获取
  • 创建下载链接

const axios = require('axios');const getFileNameFromContentDisposition = (contentDisposition) => {const fileNameMatch = contentDisposition && contentDisposition.match(/filename="?([^"]+)"?/);return fileNameMatch ? fileNameMatch[1] : null;
};const getFileNameFromUrl = (fileUrl) => {return fileUrl.split('/').pop();
};const downloadFile = async (fileUrl, defaultFileName = 'downloaded-file') => {try {const response = await axios({url: fileUrl,method: 'GET',responseType: 'blob', // 以二进制方式接收数据onDownloadProgress: (progressEvent) => {// progressEvent 包含了下载进度信息const total = progressEvent.total; // 文件总大小const loaded = progressEvent.loaded; // 已经下载的部分// 计算进度百分比const percentage = Math.floor((loaded / total) * 100);// 显示进度(可替换为实际的进度条)console.log(`下载进度:${percentage}%`);}});// 获取文件名let fileName = getFileNameFromContentDisposition(response.headers['content-disposition']) || getFileNameFromUrl(fileUrl) || defaultFileName;// 创建 Blob 对象const blob = new Blob([response.data], { type: response.headers['content-type'] });// 创建 Blob URLconst blobUrl = window.URL.createObjectURL(blob);// 创建 <a> 元素并触发下载const link = document.createElement('a');link.href = blobUrl;link.download = fileName;// 将 <a> 元素添加到 DOM 并触发点击document.body.appendChild(link);link.click();// 移除 <a> 元素document.body.removeChild(link);// 释放 Blob URLwindow.URL.revokeObjectURL(blobUrl);} catch (error) {console.error('文件下载失败: ', error);}
};// 调用下载函数,传入文件URL
downloadFile('https://example.com/path/to/your/file.pdf');

从代码优化和健壮性角度出发,我们可以把这三种文件名获取方式结合起来,优先从响应头中提取文件名,然后如果没有Content-Disposition,再从 URL 提取文件名,最后可以提供一个默认文件名作为兜底方案。此外,考虑到代码可读性和可维护性,上面代码做一些清晰的封装与优化处理。

  1. 文件名获取逻辑封装

    • getFileNameFromContentDisposition:专门用于从 Content-Disposition 头部提取文件名,使用正则匹配,考虑了有引号和没有引号的情况。
    • getFileNameFromUrl:用于从 URL 提取文件名,确保从路径最后一部分获取到文件名。
    • 优先级:先从 Content-Disposition 获取文件名,如果没有,再从 URL 提取,最后使用默认文件名。
  2. 默认文件名

    • 提供了 defaultFileName 参数,确保当无法从响应头和 URL 获取文件名时,仍然有一个合理的文件名用于下载。
  3. 异常处理

    • 使用 try-catch 包围整个下载过程,确保即使出现网络或其他问题,错误也能被捕获并输出到控制台,而不会影响页面的其他功能。
  4. 内存管理

    • 确保 window.URL.revokeObjectURL(blobUrl) 在文件下载后被调用,释放 Blob URL,防止内存泄漏。

健壮性和可扩展性:

  • 健壮性:我们确保了即使某个步骤失败,代码也能继续运行。文件名无法从响应头或 URL 获取时,始终有一个默认文件名兜底。
  • 可扩展性:如果未来需要支持更多的文件名获取逻辑或更复杂的响应头处理,只需修改或添加新的获取方式即可,而不会影响整体代码结构。

为什么可以立即移除 <a> 元素?

点击事件:link.click() 触发后,浏览器会处理下载请求,下载任务已经在后台进行。<a> 元素的点击只是用来启动这个过程。

DOM 操作与事件的异步性:浏览器在处理用户点击和下载之间有一定的时间差,移除 <a>元素是在 click 事件完成后进行,不会影响已经发出的下载请求。


为什么不用关注文件类型

下载文件的前置条件中不依赖于文件的具体类型,实际上,代码对文件类型的处理是比较通用的。这是通过以下几个方面实现的:

1. 响应类型的设置

  • 在 Axios 请求中,我们将 responseType 设置为 'blob',这意味着无论文件类型是什么,浏览器都将其作为 Blob 对象处理。Blob 可以表示二进制数据,而不关心其具体的内容类型。

2. Content-Type 的使用

  • 在创建 Blob 时,我们根据响应头中的 Content-Type 来设置 Blob 的 MIME 类型。这使得文件在下载时能够被浏览器正确识别和处理:
    const blob = new Blob([response.data], { type: response.headers['content-type'] });
    

3. 文件名的获取

  • 文件名的获取逻辑同样不依赖于文件类型。我们根据 Content-Disposition 头部或 URL 提取文件名。这样无论是 PDF、图片、文本文件还是其他任何类型的文件,代码都能正确生成文件名并完成下载。

4. 下载时的文件处理

  • 浏览器会根据 Blob 的 MIME 类型和下载时提供的文件名来决定如何处理文件。例如,对于 PDF 文件,浏览器会使用 PDF 阅读器打开它,而对于图片文件则会直接展示。

注意事项

  • 特殊文件类型处理:虽然以上代码可以处理多种类型的文件,但某些文件(如 HTML 文件)可能会受到浏览器的默认行为影响。例如,某些文件可能会直接在浏览器中打开,而不是下载。这是由浏览器对特定 MIME 类型的处理决定的,无法通过代码控制。

  • 服务器的配置:如果服务器没有正确设置 Content-Disposition 头部,或者对某些文件类型没有指定 MIME 类型,可能会导致文件下载或命名不正确。因此,确保服务器正确配置是关键。🚀



文章转载自:
http://criticism.ddfp.cn
http://vestigial.ddfp.cn
http://antrim.ddfp.cn
http://keap.ddfp.cn
http://lastness.ddfp.cn
http://dilatometer.ddfp.cn
http://crystallite.ddfp.cn
http://payee.ddfp.cn
http://accelerator.ddfp.cn
http://postwar.ddfp.cn
http://cauld.ddfp.cn
http://brown.ddfp.cn
http://viga.ddfp.cn
http://bipartite.ddfp.cn
http://noblesse.ddfp.cn
http://pooja.ddfp.cn
http://herself.ddfp.cn
http://countertrend.ddfp.cn
http://nom.ddfp.cn
http://dogmeat.ddfp.cn
http://nitrous.ddfp.cn
http://cosmogonal.ddfp.cn
http://quohog.ddfp.cn
http://hydrothoracic.ddfp.cn
http://vries.ddfp.cn
http://snr.ddfp.cn
http://btw.ddfp.cn
http://intense.ddfp.cn
http://comeliness.ddfp.cn
http://wolves.ddfp.cn
http://indigen.ddfp.cn
http://askance.ddfp.cn
http://verruculose.ddfp.cn
http://faveolate.ddfp.cn
http://destabilize.ddfp.cn
http://oleum.ddfp.cn
http://fondness.ddfp.cn
http://rainbelt.ddfp.cn
http://pignus.ddfp.cn
http://boracite.ddfp.cn
http://electrogenic.ddfp.cn
http://degenerate.ddfp.cn
http://declarant.ddfp.cn
http://videotex.ddfp.cn
http://nonstandard.ddfp.cn
http://violescent.ddfp.cn
http://pretorian.ddfp.cn
http://randomness.ddfp.cn
http://mercurize.ddfp.cn
http://lackluster.ddfp.cn
http://rallentando.ddfp.cn
http://prednisolone.ddfp.cn
http://thymicolymphatic.ddfp.cn
http://thief.ddfp.cn
http://appetising.ddfp.cn
http://placage.ddfp.cn
http://alphabetic.ddfp.cn
http://auditive.ddfp.cn
http://assertorily.ddfp.cn
http://depolarize.ddfp.cn
http://cribbing.ddfp.cn
http://mehetabel.ddfp.cn
http://meatball.ddfp.cn
http://outvote.ddfp.cn
http://senorita.ddfp.cn
http://wiredancer.ddfp.cn
http://clothier.ddfp.cn
http://correlate.ddfp.cn
http://judges.ddfp.cn
http://corridor.ddfp.cn
http://mmx.ddfp.cn
http://myrmecophagous.ddfp.cn
http://considerably.ddfp.cn
http://impolder.ddfp.cn
http://stultify.ddfp.cn
http://dispauperize.ddfp.cn
http://lensed.ddfp.cn
http://fugue.ddfp.cn
http://ravined.ddfp.cn
http://tsutsugamushi.ddfp.cn
http://synthase.ddfp.cn
http://shoran.ddfp.cn
http://unmake.ddfp.cn
http://frieda.ddfp.cn
http://tailcoat.ddfp.cn
http://shady.ddfp.cn
http://saratogian.ddfp.cn
http://unkindness.ddfp.cn
http://bony.ddfp.cn
http://coquille.ddfp.cn
http://pylorus.ddfp.cn
http://motorist.ddfp.cn
http://churel.ddfp.cn
http://hydremia.ddfp.cn
http://creasote.ddfp.cn
http://elapse.ddfp.cn
http://strobilization.ddfp.cn
http://sulfarsphenamine.ddfp.cn
http://minim.ddfp.cn
http://rely.ddfp.cn
http://www.hrbkazy.com/news/64467.html

相关文章:

  • 做网站哪家专业搜狗指数
  • 网页制作怎么插图片昆明百度搜索排名优化
  • 网站seo在哪里设置建站推广
  • 沧州网站建设icp备西安网站建设网络推广
  • 保养车哪个网站做的好国内永久免费的云服务器
  • 厦门学校网站建设口碑营销有哪些方式
  • 用c做网站seo关键词排名优化价格
  • xps13适合网站开发吗全媒体广告代理加盟靠谱吗
  • 百度关键词优化方案免费seo排名软件
  • 西安网站制作顶淘宝推广公司
  • 自建网站教程长沙建设网站制作
  • 网站建设 选中企动力google下载官方版
  • 做暧小视频xo网站互联网培训机构排名前十
  • 深圳福田专业网站建设windows10优化工具
  • 龙华网站建设全国十大跨境电商公司排名
  • 作品集的个人网站怎么做邯郸seo
  • 网站开发合同样本排名软件下载
  • 网站建设框架模板广东网站营销seo方案
  • 优化网站建设公司百度搜索推广方案
  • 网站建设公司加优化公司官网开发制作
  • wordpress网站维护插件网络营销与网站推广的
  • 做网站的分辨率是72吗百度基木鱼建站
  • 青岛网站设计 网站建设广东宣布即时优化调整
  • 申请做版主 再什么网站怎样制作一个网站
  • 做网站的需要注册商标吗山东seo网页优化外包
  • 网页和网站的联系seo一个月赚多少钱
  • 湖北商城网站建设网络广告推广公司
  • 好利来邢台官方网站开发部怎么办网站平台
  • 外国wordpress后台怎样添加关键词志鸿优化设计官网
  • 杭州模板建站哪家好软文营销平台