尝试使用Node.js下载PDF文件时,获取“无文件”或空文件

伊戈尔

问题:

我需要从服务器下载PDF文件,但获取“无文件”或空文件

细节:

这是我的服务器端代码:

let fileBuffered = '';

// authentication for downloading a file from Dropbox API to my server
    const dropbox = dropboxV2Api.authenticate({
        token: process.env.DEV_DROPBOX_SECRET_KEY
    });

    // configuring parameters
    const params = Object.freeze({
        resource: "files/download",
        parameters: {
            path: `/${customerFileFolder}/${fileName}`
        }
    });

    let dropboxPromise = new Promise(function (resolve, reject) {
        dropbox(params, function (err, result) {
            if (err) {
                reject(err);
            } else {
                resolve(result);
            }
        }).on('data',function(data) {
                fileBuffered += data;
        })
    const file = fileBuffered;

    res.setHeader("Content-Type", "application/octet-stream");
    res.send(file);

我要下载的PDF文件大小为139,694字节。fileBuffered变量的长度为132,597。这是调试器中显示的变量内容:在此处输入图片说明看起来像合法的PDF文件

这是客户端

function documentFileDownload(fileName) {
    const ip = location.host;
    let request = $.ajax({
        type: "POST",
        url: `${http() + ip}/documentFileDownload`,

        headers: {
            "Accept": "application/octet-stream"
        },


        data: {
            fileName: fileName
        },
        error: function (err) {
            console.log("ERROR: " + err);
        }
    });

    console.log(request);

    return request;
}

问题:然后,我在客户端获得响应,如下所示:

在此处输入图片说明

请注意responseText的大小:254Kb。我实际上在浏览器中看到的是“失败-没有文件”消息

在此处输入图片说明

我还尝试了什么:

我尝试在服务器端使用不同的Content-Type(应用程序/ pdf,text / pdf),并尝试将变量转换为base64缓冲区

const file = `data:application/pdf;base64, ${Buffer.from(fileBuffered).toString("base64")}`;

并添加了res.setHeader("Accept-Encoding", "base64");但仍得到相同的结果。

有任何想法吗?

伊戈尔

我找到了解决方案。.on("end", )从Dropbox流中读取数据时,我错过了一个事件。这是一个可行的解决方案:

这是服务器端:

let chunk = [];
let fileBuffered = '';

// authentication for downloading a file from Dropbox API to my server
    const dropbox = dropboxV2Api.authenticate({
        token: process.env.DEV_DROPBOX_SECRET_KEY
    });

    // configuring parameters
    const params = Object.freeze({
        resource: "files/download",
        parameters: {
            path: `/${customerFileFolder}/${fileName}`
        }
    });

    let dropboxPromise = new Promise(function (resolve, reject) {
        dropbox(params, function (err, result) {
            if (err) {
                reject(err);
            } else {
                resolve(result);
            }
        }).on('data',function(data) {
                fileBuffered += data;
        }).on('end', () => {
                // console.log("finish");\
                // generate buffer
                fileBuffered = Buffer.concat(chunk);
            });

    const file = `data:application/pdf;base64, ${Buffer.from(fileBuffered).toString("base64")}`;
    res.setHeader("Content-Type", "application/pdf");
    res.send(file);

客户端:

function documentFileDownload(fileName) {
    const ip = location.host;
    let request = $.ajax({
        type: "POST",
        url: `${http() + ip}/documentFileDownload`,
        responseType: "arraybuffer",
        headers: {
            "Accept": "application/pdf"
        },

        data: {
            fileName: fileName
        },
        error: function (err) {
            console.log("ERROR: " + err);
        }
    });

    // console.log(request);
    return request;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

readfile()在尝试强制下载时返回空文件

来自分类Dev

readfile()在尝试强制下载时返回空文件

来自分类Dev

使用VBScript下载空文件

来自分类Dev

尝试使用它下载大型文件时,Node.js应用程序崩溃

来自分类Dev

尝试阅读原始文件时出现重复的空文件

来自分类Dev

使用PHPWord下载DOCX文件时获取损坏的文件

来自分类Dev

Node.js-下载和本地保存PDF文件以供离线使用-文件损坏

来自分类Dev

使用Node Express JS下载文件

来自分类Dev

使用BlockingQueue下载PDF文件

来自分类Dev

使用JavaScript下载PDF文件

来自分类Dev

使用Sails js显示和下载PDF文件时出现问题

来自分类Dev

下载时获取空文件:jsf

来自分类Dev

尝试使用获取 AttributeError 的 Python FTP_TLS 对象下载文件时?

来自分类Dev

尝试从SQL Developer导出时,SPOOL返回空文件

来自分类Dev

Android:使用log4j2创建日志时获取多余的空文件

来自分类Dev

使用JS从iPhone打开或下载pdf文件进行打印

来自分类Dev

使用WebClient下载时获取原始文件名

来自分类Dev

尝试使用 akka 流编组 jaxb 对象时出现空文件

来自分类Dev

使用Node下载.ttf文件

来自分类Dev

尝试使用CSV文件从URL下载数据

来自分类Dev

尝试使用Powershell从Weblink下载zip文件

来自分类Dev

尝试使用FileUtils下载文件

来自分类Dev

fs.writeFile创建空文件(node.js)

来自分类Dev

node.js-执行错误命令后清空文件

来自分类Dev

使用请求模块下载文件会创建一个空文件

来自分类Dev

使用Addon SDK API下载许多文件时,Firefox UI变得无响应

来自分类Dev

使用Java下载文件时如何获取原始文件名

来自分类Dev

使用FtpWebRequest下载文件时获取文件名而不是内容

来自分类Dev

使用FtpWebRequest下载文件时获取文件名而不是内容

Related 相关文章

  1. 1

    readfile()在尝试强制下载时返回空文件

  2. 2

    readfile()在尝试强制下载时返回空文件

  3. 3

    使用VBScript下载空文件

  4. 4

    尝试使用它下载大型文件时,Node.js应用程序崩溃

  5. 5

    尝试阅读原始文件时出现重复的空文件

  6. 6

    使用PHPWord下载DOCX文件时获取损坏的文件

  7. 7

    Node.js-下载和本地保存PDF文件以供离线使用-文件损坏

  8. 8

    使用Node Express JS下载文件

  9. 9

    使用BlockingQueue下载PDF文件

  10. 10

    使用JavaScript下载PDF文件

  11. 11

    使用Sails js显示和下载PDF文件时出现问题

  12. 12

    下载时获取空文件:jsf

  13. 13

    尝试使用获取 AttributeError 的 Python FTP_TLS 对象下载文件时?

  14. 14

    尝试从SQL Developer导出时,SPOOL返回空文件

  15. 15

    Android:使用log4j2创建日志时获取多余的空文件

  16. 16

    使用JS从iPhone打开或下载pdf文件进行打印

  17. 17

    使用WebClient下载时获取原始文件名

  18. 18

    尝试使用 akka 流编组 jaxb 对象时出现空文件

  19. 19

    使用Node下载.ttf文件

  20. 20

    尝试使用CSV文件从URL下载数据

  21. 21

    尝试使用Powershell从Weblink下载zip文件

  22. 22

    尝试使用FileUtils下载文件

  23. 23

    fs.writeFile创建空文件(node.js)

  24. 24

    node.js-执行错误命令后清空文件

  25. 25

    使用请求模块下载文件会创建一个空文件

  26. 26

    使用Addon SDK API下载许多文件时,Firefox UI变得无响应

  27. 27

    使用Java下载文件时如何获取原始文件名

  28. 28

    使用FtpWebRequest下载文件时获取文件名而不是内容

  29. 29

    使用FtpWebRequest下载文件时获取文件名而不是内容

热门标签

归档