【问题标题】:How to retrieve pdf from remote server and return it as a koa response?如何从远程服务器检索 pdf 并将其作为 koa 响应返回?
【发布时间】:2018-09-16 07:18:11
【问题描述】:

我有一个使用 koa 的节点应用程序,并尝试检索远程 pdf,并将其作为我的 koa 请求的响应返回。代码如下:

router.get('/pdf', function *() {
    const url = 'http://example.com/pdf'
    const res = yield request(url)
    this.status = res.statusCode
    Object.keys(res.headers).forEach(key => {
      this.set(key, res.headers[key])
    })
    this.body = res.body
})

我得到了带有空白页的 pdf,但里面应该有内容。有谁知道可能是什么解决方案?

【问题讨论】:

    标签: node.js koa


    【解决方案1】:

    这有点难以弄清楚。我发现必须使用stream 包的PassThrough 函数。下面的代码将外部 PDF 流式传输到 /pdf 路由,它可以在浏览器中打开。

    const Koa = require('koa');
    const Router = require('koa-router');
    
    const app = new Koa();
    const router = new Router();
    
    // Source: http://koajs.com/#stream
    const PassThrough = require('stream').PassThrough;
    const request = require('request');
    
    router.get('/pdf', (ctx) => {
      const url = 'https://collegereadiness.collegeboard.org/pdf/sat-practice-test-8.pdf';
      ctx.set('Content-Type', 'application/pdf');
      ctx.body = request(url).pipe(PassThrough());
    });
    
    app
      .use(router.routes());
    
    app.listen(3000);
    

    【讨论】:

    • 谢谢,这行得通。我通过将 encoding: null 参数传递给请求选项来解决它,我认为问题出在编码上,并在这里找到了解决方案:stackoverflow.com/questions/14855015/…
    猜你喜欢
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    相关资源
    最近更新 更多