nodejs 下载网址附件,并从filename* 中获得文件名
时间: 2024-06-09 17:06:51 浏览: 18
在 Node.js 中,你可以使用 `request` 模块来下载网址附件。以下是一个简单的例子:
```javascript
const request = require('request');
const fs = require('fs');
const iconv = require('iconv-lite');
const url = 'http://example.com/file.pdf';
request({url: url, encoding: null}, function (error, response, body) {
const disposition = response.headers['content-disposition'];
let filename = '';
if (disposition && disposition.indexOf('filename=') !== -1) {
const matches = disposition.match(/filename\*=(.*?)'/);
if (matches && matches.length > 0) {
filename = decodeURIComponent(matches[1]);
} else {
filename = disposition.replace(/filename=/, '');
}
}
const buffer = iconv.decode(body, 'utf-8');
fs.writeFile(filename, buffer, function (err) {
if (err) throw err;
console.log('File saved!');
});
});
```
这里使用了三个模块:`request` 用于下载文件,`fs` 用于保存文件,`iconv-lite` 用于解码文件名。在获取文件名时,我们先检查 `content-disposition` 头中是否包含 `filename*`,如果有则从中提取文件名,并使用 `decodeURIComponent` 进行解码;否则,直接从 `filename=` 中提取文件名。
下载文件时,我们将 `encoding` 设置为 `null`,这样返回的 `body` 将是一个 `Buffer` 对象,接着使用 `iconv-lite` 将其解码为 `utf-8` 编码的字符串,最后使用 `fs.writeFile` 将其保存为文件。
需要注意的是,如果文件名中包含非 ASCII 字符,可能需要使用其他的编码方式进行解码。