【问题标题】:NodeJS Read file attachment from HTTP responseNodeJS 从 HTTP 响应中读取文件附件
【发布时间】:2020-07-08 15:02:27
【问题描述】:

有人知道如何读取或访问 HTTP 响应的附件吗?

我的意思是,服务器响应是:

HTTP/1.1 200 OK
Server: something
Date: Fri, 01 May 2015 10:22:29 GMT
Content-Type: application/pdf
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Language, Cookie
X-Frame-Options: SAMEORIGIN
Content-Language: en
Content-Disposition: attachment; filename=mybill-234324.pdf
Set-Cookie: s=xxxxx; expires=Fri, 15-May-2015 10:22:29 GMT; httponly; Max-Age=1209600; Path=/; secure
Strict-Transport-Security: max-age=15552000

但是这个mybill-234324.pdf文件内容在哪里???

我的代码:

var req = https.request({
    method: 'GET',
    host: 'thehost.ext',
    path: '/account/bills/' + number + '/',
    headers: {
      'Cookie': 's=supercryptedhash;',
      'Accept-Language': 'en-US,en'
    }
  }, function(res) {
    // ????
  });

  req.on('error', function(err) {
    console.error('Request Error', err);
  });

  req.end();

【问题讨论】:

  • 请提供代码示例
  • 在问题编辑中提供。
  • Answer use 'request' module 我无法安装,我需要一个基于 'http' 或 'https' 节点原生模块的解决方案。
  • 您的响应处理程序在哪里?这将从服务器返回所有内容——标头和数据。

标签: node.js http


【解决方案1】:

https 文档 (https://nodejs.org/api/https.html) 提供了一个示例:

options = { ... };

var req = https.request(options, function(res) {
    console.log("statusCode: ", res.statusCode);
    console.log("headers: ", res.headers);

    res.on('data', function(data) {
        // var `data` is a chunk of data from the response body
        process.stdout.write(data);
    });
});


req.on('error', function(e) {
  console.error(e);
});

req.end();

【讨论】:

  • 我检查了,但是当 Content-Disposition 标题为“附件”时它不起作用......让我再试一次看看。
  • 它应该仍然可以工作,httphttps 模块不会特别注意 content-disposition 标头。
  • 加布里埃尔是什么意思?在这种情况下我无法下载,或者在阅读响应正文时应该在这里?
  • 您是否要实际下载文件?下面是如何将完整数据放入字符串变量的完整示例 - gist.github.com/gmaybrun/fd35a06e6d0356aceef2。您可以在client.js 中的end 处理程序之后对该变量执行任何操作(例如,将其写入本地文件系统上的文件)。简短版本:node.js 忽略 content-disposition 标头 - 它不会自动为您保存文件。它将内容数据传递给您的代码以像任何其他响应一样进行处理。
【解决方案2】:

我遇到了同样的问题,我尝试了各种 npm 包来获取文件的内容

内容配置:附件

  const url = "https://XXXX"; // your URL Here
  const curl = require('curl');
  let options = {};  
  curl.get(url, options, function(err, response, body) {          
  console.log("BODY", body);      
  });

最后我得到了使用CURL的回复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多