通过 FTP 从节点 API 下载 PDF

Download PDF from node API via FTP

我在远程服务器上有 PDF。我有 API 节点,我想从我的网站下载 PDF。

我正在使用 jsftp 上传和阅读 PDF。它工作正常:

let str = '';
FTP.get('path/to/my/file', (err, socket) => {
    socket.on("data", d => {
        str += d.toString();
    });
    socket.on("close", err => {
        if (err) {
            console.error("There was an error retrieving the file.", err);
        }
        // HERE I HAVE THE FILE IN STRING
    });
    socket.resume();
});

在关闭事件中我有字符串格式的文件,但我没有成功将它发送到浏览器。我试过类似的东西:

let s = new Readable();
s.push(str);
s.push(null);
s.pipe(res);

res.end(str);

但是在浏览器中没有任何反应

我正在为我的 ajax 请求使用 Polymer

<iron-ajax
    id="openPdf"
    content-type="application/json"
    method="POST"
    url="/api/karaweb/pdf"
    on-response="handleOpenPdfResponse"
    on-error="errorMessage"></webservice-request> 

有什么解决办法吗?

谢谢

我有一个名为 PdfDownloaderMixin 的 mixin;这是完整的代码:

<link rel="import" href="../../bower_components/polymer/polymer-element.html">

<dom-template id="pdf-downloader-mixin">
    <script>
        /* @polymerMixin */
        const PdfDownloaderMixin = (superClass) => class extends superClass {
            constructor() {
                super();
            }

            downloadPdf(blobData) {
                let fileObjectUrl = window.URL.createObjectURL(blobData);
                window.open(fileObjectUrl);
            }
        }
    </script>
</dom-template>

然后在你的元素中这样使用:

<link rel="import" href="../../bower_components/polymer/polymer-element.html">
<link rel="import" href="../../bower_components/iron-ajax/iron-ajax.html" />
<link rel="import" href="pdf-downloader-mixin.html" />

<dom-module id="attachment-handler">
    <template>
        <iron-ajax id="getAttachmentAjax"
                   url="[[rootPath]]api/session/getattachment"
                   debounce-duration="300"
                   handle-as="blob"></iron-ajax>
    </template>
    <script>
        class AttachmentHandler extends PdfDownloaderMixin(Polymer.Element) {
            static get is() { return 'attachment-handler'; }

            getAttachment() {
                this.$.getAttachmentAjax.generateRequest().completes.then((req) => {
                        req.succeeded && this.downloadPdf(req.response);
                    });
            }
        }

        customElements.define(AttachmentHandler.is, AttachmentHandler);
    </script>
</dom-module>