上下文:具有Express的多层Node.js应用程序。前端托管为Azure网站,后端数据来自Parse。
我有一个GET端点,并且希望用户体验是文件下载。如果文件与前端位于同一服务器上,则可以使用
res.sendfile(localPath);
但是,该文件由我的后端托管在另一台服务器上,而我的前端只知道URL。所以我目前正在做:
res.redirect(externalURL);
这导致浏览器导航到资产文件URL(视频),并显示在浏览器中。我想知道的是: 如何让浏览器下载该文件,而只停留在同一页面上?
我已经搜索了一段时间,如果没有先将文件下载到前端的临时文件中,我就看不到这样做的方法,而我显然不愿意这样做。这可能是HTTP
101的东西,因此,我感谢任何帮助!
您可以使用http.request()
函数向发出请求externalURL
,然后pipe()
将响应返回给res
。使用pipe()
将通过服务器将文件流式传输到浏览器,但在任何时候都不会将其保存到磁盘。如果您还希望下载文件(而不是仅显示在浏览器中),则必须设置content- disposition
header。
这是一个将“下载” Google徽标的服务器的示例。这只是使用标准http
模块,而不是表达模块,但是它的工作方式基本相同:
var http = require('http');
http.createServer(function(req, res) {
var externalReq = http.request({
hostname: "www.google.com",
path: "/images/srpr/logo11w.png"
}, function(externalRes) {
res.setHeader("content-disposition", "attachment; filename=logo.png");
externalRes.pipe(res);
});
externalReq.end();
}).listen(8080);
如果要使用该request
模块,则更加简单:
var http = require('http'),
request = require('request');
http.createServer(function(req, res) {
res.setHeader("content-disposition", "attachment; filename=logo.png");
request('http://google.com/images/srpr/logo11w.png').pipe(res);
}).listen(8080);
注意: 浏览器将保存的文件名由标题的filename=
一部分设置content- disposition
;在这种情况下,我将其设置为logo.png
。
问题内容: Expressjs框架具有sendfile()方法。我如何在不使用整个框架的情况下做到这一点。我正在使用node-native- zip创建档案,并将其发送给用户。 问题答案: 这是一个示例程序,它将通过从磁盘流式传输myfile.mp3来发送myfile.mp3(也就是说,在发送文件之前,它不会将整个文件读入内存)。服务器在端口2000上侦听。 [更新] 正如@Aftershock在
问题内容: 我的要求是使用HTTP Servlet将PDF数据响应到移动客户端(iPhone)。 我是按照以下方式完成的,但是我没有在客户端获得预期的输出。 我遵循的方法正确吗?请指教。 谢谢。 问题答案: 您必须使用ServletOutputStream及其write()方法将字节写入response。
我正在尝试编写一个将图像转换为PDF文件的web应用程序。用户发送两幅图像(JPEG、PNG),并应接收和下载PDF文件。 目前的主要问题是我不知道如何将PDF文件返回给客户端。 这是我的控制器: 这是将图像转换为PDF文件的服务(这里我使用库): 另外,当生成文件以从存储中下载文件时,可以将PDF文件存储在某个位置,并在客户端创建“下载”按钮?
Expressjs框架有一个方法。如果不使用整个框架,我怎么能做到这一点? 我正在使用node-native-zip创建一个归档文件,并希望将其发送给用户。
我想通过改型从get api获得响应,但我不知道如何检查,因此在给定完整代码和api响应的下面显示空响应, 我的回应是: 我的接口类: POJO: 下面是MainActivity类中的调用方法: 上面给出了完整的代码,但它显示空响应,因为我不知道如何检查和改装中的数据数组对象。 所以请谁能解释一下如何在改装中检查它。 谢谢。
问题内容: 我在Google上搜索了此内容,但找不到答案,但这一定是一个常见问题。这是与Node request读取图像流-通过管道返回响)相同的问题,尚未得到答复。 如何发送图像文件作为Express .send()响应?我需要将RESTful网址映射到图片-但是如何发送带有正确标题的二进制文件?例如, 通话中… 问题答案: Express中有一个api。 http://expressjs.co