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请求,并设置responseTypestream,以便能够处理文件流。在获取到响应后,通过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字段有所帮助!