Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在node.js中代理PDF文件_Javascript_Node.js_Http_Pdf_Proxy - Fatal编程技术网

Javascript 无法在node.js中代理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

我需要从外部服务接收的端点下载pdf,将pdf存储在我的数据库中,并将其发送回浏览器(或在我的系统上调用API的人)。 由于某些原因,我无法理解如果我将服务的URL直接放在浏览器上,它会正确打开pdf,但是如果我运行此代码

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);
});