gpt4 book ai didi

javascript - node/express 强制浏览器使用自定义名称下载文件

转载 作者:搜寻专家 更新时间:2023-10-31 23:00:27 25 4
gpt4 key购买 nike

我为我的大学项目构建了一个 node/express 网站,在搜索法律的 ID 后,它显示了一个大表格,其中包含与该 ID 相关的不同格式和语言的所有文件。我使用模块“http-proxy”来请求这些文件并将其提供给客户端。提供 xml、xhtml、html 和 pdf 文件时没有问题(每个浏览器都可以直接查看它们)。我对 .zip 和 .rdf 文件有疑问。文件没有损坏,但丢失了原来的名称

  • 当我点击 ZIP 图标时,它会提示我下载,但我丢失了原始文件名(该文件将被称为“proxy”或“proxy.zip”,在不同的浏览器上有不同的行为)<
  • 当我点击 RDF 图标时,有些浏览器直接在浏览器中打开文件,有些浏览器无法识别格式,有些浏览器想要使用名称“proxy”下载它)

于是我发现了标签“a”的HTML5属性“download”。它只是解决了我的问题,反正不是每个版本的 Internet Explorer 和 Safari 都支持它。在网上冲浪时,我发现了一些解决方法,可以在 IE 或 Safari 中查看页面时在 div 链接后添加“右键单击并另存为...”,但此解决方案不适合我,因为我不是在谈论单个link 而是一个充满链接的表格。我的网站也需要在手机上运行。

有什么方法可以编写一些服务器端代码来强制浏览器下载具有自定义文件名的文件吗?

这是代理的一小段代码:

var httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({ ignorePath: true });

app.get('/proxy', function(req , res) {
var file = req.query.file;
var realurl = 'http://'+cfg.edb_opt.host+':'+cfg.edb_opt.port+cfg.edb_opt.rest+file;
console.log('Proxy: serving '+realurl);
proxy.web(req, res, { 'target': realurl });
});

所有的cfg*变量都来自一个json配置文件,用于设置文件所在的主机、端口和起始路径。

提前致谢:)

最佳答案

您需要在响应对象中添加一个新的 header 以指示文件名并进行定期下载。

res.set("Content-Disposition", "attachment;filename=somefile.ext");

如果您希望浏览器尝试自行打开其中的文件,您也可以使用“内联”,就像 Chrome 浏览器打开 pdf 文件一样。

res.set("Content-Disposition", "inline;filename=somefile.ext");

根据@Thomas 的建议,始终包含正确的内容类型也是一个好主意:

res.set("Content-Type", "application/octet-stream");

关于javascript - node/express 强制浏览器使用自定义名称下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36936605/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com