首页 > 其他分享 >更加优雅的下载文件 --- http header Content-Disposition 学习

更加优雅的下载文件 --- http header Content-Disposition 学习

时间:2024-07-02 12:30:53浏览次数:3  
标签:Content http 文件 fileName --- header Disposition download 下载

更加优雅的下载文件 --- http header Content-Disposition 学习

Content-Disposition 在响应头中,告诉浏览器如何处理返回的内容,在表单提交中,说明表单字段信息。

在响应头中

用在响应头中,告诉浏览器如何处理返回的内容。

'Content-Disposition': 'inline'

预览,返回的内容替换当前页面,可使用 a 标签的 target="_blank" 打开新标签。

'Content-Disposition': 'attachment'

下载,使用 a 访问,会把路径作为名字,文件后缀名浏览器自动识别。

'Content-Disposition': 'attachment;filename=filename'

下载,接口指定文件名字。

文件名含有中文,使用 encodeURIComponent 编码,否则报错。

Invalid character in header content [“Content-Disposition”]。

在请求头中

页面上有表单,并且我们选择的表单提交方式为 multipart/form-data 时, Content-Disposition 会出现在请求体中。

可能会这样出现:

Content-Disposition: form-data
Content-Disposition: form-data; name="fieldName"
Content-Disposition: form-data; name="fieldName"; filename="filename.jpg"

实例代码

a 标签的 download 属性

downloada 标签的属性,用于指定下载动作或者指定文件的名字。

<!-- 下载 -->
<a href="http://localhost:3000/download" download>download</a>
<!-- 下载且指定名字 -->
<a href="http://localhost:3000/download" download="filename">download</a>

download 用于指定名字,如果不指定,浏览器会使用路径的最后一部分作为文件名。

/**
 * 从链接下载文件
 * @param {string} fileId 文件 id
 * @param {string} fileName 文件名,默认为 ''
 * @param {string} path 文件下载路径,默认为 FILE_PATH
 * @example downloadFile('123', '文件名') // 下载 文件名.docx
 * @example downloadFile('docFile') // 下载 docFile.docx
 * @example downloadFile('docFile','file-name','download/path') // 下载 docFile.docx
 */
export function downloadFile(fileId, fileName = '', path = FILE_PATH) {
  if (!fileId) return
  const dotIndex = fileName.lastIndexOf('.')
  const name = dotIndex > 0 ? fileName.slice(0, dotIndex) : fileName
  const dateName = dayjs().format('YYYY年MM月DD日HH时mm分ss秒')
  const a = document.createElement('a')
  a.setAttribute('download', name || dateName)
  a.href = `${path}/${fileId}?fileName=${fileName}`
  a.click()
  a.remove()
}

指定文件名字成功的两个条件:

  • 同源
  • 接口没设置 Content-Dispositionfilename 属性

小结

  • Content-Disposition 用于告诉浏览器如何处理返回的内容,用在响应头中,可用于下载文件。
  • a标签用于的 download 属性用于下载文件,同源,且接口没设置 Content-Dispositionfilename 属性才能指定文件名字。

标签:Content,http,文件,fileName,---,header,Disposition,download,下载
From: https://blog.csdn.net/JackZhouMine/article/details/140123504

相关文章

  • 【产品经理修炼之道】-硬件产品经理做什么
    硬件产品经理一般负责产品的整个流程管理,本篇文章介绍硬件产品经理的四个工作流程:产品规划、立项研发、GTM、复制推广,并对四个流程内容进行详细地介绍分析,希望能对你有所启发。硬件产品经理是产品的最终负责人,负责产品的全流程管理。说得直白一些,就是任何和硬件产品盈利有关的......
  • ros2 - slam - 编码器测速原理
    上节做完小车,遥控时小车前进时你应该会发现,小车很难走一条直线,但明明我们给到两个电机的PWM占空比都是相同的,原因在于每一个电机的硬件参数并不能完全的保证一致,所以当我们采用开环控制时,即使我们给到每个电机相同的电压,也不能让两个电机保持相同的转速。要解决这个问题我们就要......
  • 【Java完整版 面试必备】Leetcode Top100题目和答案-子串篇
    以下摘自leetcodeTop100精选题目-子串篇560.和为K的子数组给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。子数组是数组中元素的连续非空序列。示例:示例1:输入:nums=[1,1,1],k=2输出:2Solution:publicintsub......
  • C# HttpWebRequest 各种请求方式汇总
    GET//直接返回字符串publicstaticstringGets(stringurl,JObjectheaders){stringresult="";HttpWebRequestreq=(HttpWebRequest)WebRequest.Create(url);req.Method="Get";if(headers!=null){IEnumerable&......
  • Vue预渲染prerender-spa-plugin+vue-meta-info
    前言:公司现有一个新需求需要在原有的vue2项目上面进行预渲染,进行SEO的优化,在网上进行了一系列的搜索,发现两种简单易上手的方案(1.使用prerender-spa-plugin+vue-meta-info进行打包构建;2.使用nuxt.js在开发过程中就渲染呈现出来)因是在原有项目基础上进行,所以采用第一种方案进行构......
  • 原生js实现http请求--模拟jquery的ajax函数
     有时页面用到请求,但又不想引入jquery或者其他网络请求,增加代码冗余,增加对代码简便化,那不使用ajax情况下,可以直接使用原生js进行封装函数。原生的js通过XMLHttpRequest 对象进行的的。具体可查阅W3school的XMLHttpRequest 对象。1、封装可供请求调用的函数 functionht......
  • Karpor - 让 AI 全面赋能 Kubernetes!
    ......
  • ros2 slam - 订阅ROS2 Twist
    本节我们结合上一节电机控制以及前面章节的MicroROS话题订阅部分知识点,来实现一个可以用键盘遥控的小车。新建工程example24_ros2_car 修改配置[env:featheresp32];这是一个环境配置标签,指定了代码将运行的硬件平台和框架platform=espressif32;指定了使用的平台为E......
  • P10676 『STA - R6』b20 题解
    题目传送门简单题,主要考察字符串。首先输入一个char类型的数组,然后输入粉丝的数量,最后直接输出数组的第一个以及粉丝的数量即可。温馨提示:提交此题时请务必将数组开大,否则你可能会获得\(90\)分高分。//『STA-R6』b20//codeby:cq_irritater//time:2024/06/30#in......
  • BPI-M4 Berry USB测试
    连接USB鼠标或键盘测试1、将USB接口的键盘和鼠标插入开发板的USB接口中2、开发板连接HDMI显示器,并通电启动3、如果鼠标或键盘能正常操作系统说明USB接口使用正常(鼠标只有在桌面版的系统中才能使用)连接USB存储设备测试1、首先将U盘或者USB移动硬盘插入开发板的USB接口中2、执......