axios获取Content-Disposition里文件名
在使用axios进行文件下载时,有时候会遇到服务器返回的文件名不是直接在响应头中设置的,而是通过Content-Disposition字段指定的情况。这时候,我们就需要通过axios来获取Content-Disposition字段中的文件名。
Content-Disposition字段
Content-Disposition字段是HTTP响应头中的一个字段,用来指示客户端如何处理响应的内容。它常用于文件下载场景,通过设置Content-Disposition字段,可以告诉客户端将响应内容保存为文件而不是直接在浏览器中打开。
Content-Disposition字段有两种常见的值:
inline
:指示浏览器直接打开响应内容,不保存为文件。attachment
:指示浏览器将响应内容保存为文件,通常需要指定文件名。
axios获取Content-Disposition字段
在下载文件时,axios会将响应头中的字段保存在response.headers
中。我们可以通过response.headers
来获取Content-Disposition字段。
下面是一个使用axios下载文件并获取Content-Disposition字段的示例代码:
const axios = require('axios');
const fs = require('fs');
axios({
url: '
method: 'GET',
responseType: 'stream'
}).then(response => {
const disposition = response.headers['content-disposition'];
const filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
const matches = filenameRegex.exec(disposition);
const filename = matches != null && matches[1] ? matches[1].replace(/['"]/g, '') : 'file.txt';
response.data.pipe(fs.createWriteStream(filename));
});
在上面的代码中,我们通过axios发送了一个GET请求,并设置responseType
为stream
,以便能够处理文件流。在获取到响应后,通过response.headers['content-disposition']
来获取Content-Disposition字段的值。
然后,我们使用正则表达式来从Content-Disposition字段中提取文件名。正则表达式/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/
用来匹配filename
和文件名之间的内容。如果匹配成功,则使用匹配到的文件名,否则使用默认的文件名file.txt
。
最后,我们将响应的数据流保存到文件中,使用了fs.createWriteStream(filename)
来创建一个写入流,将数据流写入到文件中。
总结
通过上述示例代码,我们可以使用axios获取Content-Disposition字段里的文件名,以便在文件下载时能够正确保存文件。如果服务器返回的Content-Disposition字段不是固定格式的,可能需要根据实际情况来调整正则表达式的匹配规则。
希望本文对你理解如何使用axios获取Content-Disposition字段有所帮助!