Javascript 无法在node.js中代理PDF文件
我需要从外部服务接收的端点下载pdf,将pdf存储在我的数据库中,并将其发送回浏览器(或在我的系统上调用API的人)。 由于某些原因,我无法理解如果我将服务的URL直接放在浏览器上,它会正确打开pdf,但是如果我运行此代码Javascript 无法在node.js中代理PDF文件,javascript,node.js,http,pdf,proxy,Javascript,Node.js,Http,Pdf,Proxy,我需要从外部服务接收的端点下载pdf,将pdf存储在我的数据库中,并将其发送回浏览器(或在我的系统上调用API的人)。 由于某些原因,我无法理解如果我将服务的URL直接放在浏览器上,它会正确打开pdf,但是如果我运行此代码 var express = require('express'); var request = require('request'); var app = express(); var _PORT = 9008; console.log("starting server
var express = require('express');
var request = require('request');
var app = express();
var _PORT = 9008;
console.log("starting server on port " + _PORT);
// will return an unordered list of all items.
app.get('/', function(req, res) {
console.log("Proxying stuff");
var get_options = {
'rejectUnauthorized': false,
'url': 'http://www.urartuuniversity.com/content_images/pdf-sample.pdf',
'method': 'GET'
};
request(get_options, function(err, get_resp, body){
if(err){
console.log(err.message);
res.json({error: err})
}
console.log('data received from service:' + body.length);
res.type('application/pdf');
res.end(body);
});
});
app.listen(_PORT);
通过从浏览器调用localhost:9008/
,我只得到2个空白页面。我尝试过改变所有可能的配置和编码,但到目前为止,我只得到了空白页
如果您需要更多信息,请询问。请更改
var get_options = {
'rejectUnauthorized': false,
'url': 'http://www.urartuuniversity.com/content_images/pdf-sample.pdf',
'method': 'GET'
};
request(get_options, function(err, get_resp, body){
if(err){
console.log(err.message);
res.json({error: err})
}
console.log('data received from service:' + body.length);
res.type('application/pdf');
res.end(body);
});
到
因此,我终于找到了如何做到这一点:
request
.get('http://www.urartuuniversity.com/content_images/pdf-sample.pdf')
.on('response', function(response) {
var chunks = [];
response.on('data', function(chunk){
chunks.push(chunk);
});
response.on('end', function(){
var finalData = new Buffer.concat(chunks);
myDatabase.store(finalData);
res.type('application/pdf');
res.end(finalData, 'binary');
});
这可能是非常容易的
app.use('/pdf', (req, res) => {
let url = 'http://www.urartuuniversity.com/content_images/pdf-sample.pdf';
let src = request(url);
req.pipe(src).pipe(res);
});
您不必以这种方式在服务器上存储数据。正文包含什么?它是整个pdf,使用
res.sendFile
这种方式我可以发送本地存储在我的机器上的文件,但我需要从另一个URL代理它。这种方式工作正常,所以问题已经解决,但我仍然需要将pdf存储在我的数据库中,这样我就无法访问正文,对吗?`.pipe(pipe(fs.createWriteStream('pdf-sample.pdf'))//将pdf存储在服务器中,然后可以存储到数据库中。`正在崩溃。在on('end',function…)的回调中,我没有可用的参数,因此我应该如何将数据存储在DB上?@bncc请重试。这种方法很好,尽管我仍然不知道如何将文件存储在DB上:为此,我需要将其强制转换到缓冲区,然后存储它
app.use('/pdf', (req, res) => {
let url = 'http://www.urartuuniversity.com/content_images/pdf-sample.pdf';
let src = request(url);
req.pipe(src).pipe(res);
});