当前位置: 首页 > 面试题库 >

节点:通过请求下载一个zip,Zip已损坏

宿鹏程
2023-03-14
问题内容

我正在使用出色的Request库在Node中下载我正在使用的小型命令行工具中的文件。Request非常适合拉入单个文件,完全没有问题,但不适用于ZIP。

例如,我正在尝试下载URL上的Twitter
Bootstrap
存档:

http://twitter.github.com/bootstrap/assets/bootstrap.zip

该代码的相关部分是:

var fileUrl = "http://twitter.github.com/bootstrap/assets/bootstrap.zip";
var output = "bootstrap.zip";
request(fileUrl, function(err, resp, body) {
  if(err) throw err;
  fs.writeFile(output, body, function(err) {
    console.log("file written!");
  }
}

我也尝试将编码设置为“二进制”,但没有运气。实际的zip约为74KB,但是通过上述代码下载时约为134KB,并在Finder中双击以提取它,我得到了错误:

无法将“引导程序”提取到“ nodetest”(错误21-是目录)

我感觉这是一个编码问题,但不确定从这里开始。


问题答案:

是的,问题出在编码上。当您等待整个传输完成时body,默认情况下将其强制为字符串。您可以通过将选项设置为来告诉request您一个Buffer替代encodingnull

var fileUrl = "http://twitter.github.com/bootstrap/assets/bootstrap.zip";
var output = "bootstrap.zip";
request({url: fileUrl, encoding: null}, function(err, resp, body) {
  if(err) throw err;
  fs.writeFile(output, body, function(err) {
    console.log("file written!");
  });
});

另一个更优雅的解决方案是使用pipe()将响应指向文件可写流:

request('http://twitter.github.com/bootstrap/assets/bootstrap.zip')
  .pipe(fs.createWriteStream('bootstrap.zip'))
  .on('close', function () {
    console.log('File written!');
  });

一个班轮总是赢:)

pipe()返回目标流(在这种情况下为WriteStream),因此您可以侦听其close事件以在写入文件时得到通知。



 类似资料:
  • 本文向大家介绍怎么下载一个zip文件?相关面试题,主要包含被问及怎么下载一个zip文件?时的应答技巧和注意事项,需要的朋友参考一下 a标签加属性 文件流的方式 注意:Bolb的方式构建完 blob 对象后才会转换成文件,所以尽量使用a标签的形式进行下载

  • 问题内容: 我编写了一个代码,用于在文件中保存少量图像,然后压缩该文件并上传到ftp服务器。当我从服务器下载该文件时,很少有文件可用,并且很少有文件损坏。可能是什么原因呢?压缩代码或上载程序代码是否有故障。 压缩代码: } FTP上传代码: 问题答案: 确保传输BINARY_FILE_TYPE中的文件。也许返回假? 顺便说一句,如果您以ASCII模式传输zip,几乎肯定会导致损坏。

  • 我试图通过在本地服务器上创建zip文件来下载a 2文件。文件是以zip格式下载的,但当我试图解压缩它时。它给出了一个错误:找不到中央目录签名的结尾。要么该文件不是zip文件,要么它构成了多部分存档的一个磁盘。在后一种情况下,中心目录和zip文件注释将在该存档的最后一个磁盘上找到。 下面的代码我使用这个: 我检查了传递到函数中的所有变量的值,都很好。所以请看这个。提前谢谢。

  • 我不明白为什么这这么难,每个人都有自己的实现... 所以在我的服务器中,我生成了一个文件,我希望用户能够在点击后下载。 所以我设置了请求,服务器成功地接收到了请求,现在,我正在努力将字节数组写入输出。 这是我的回应代码:

  • 我想用Java编写一个GUI zip/unzip程序。该程序将能够压缩文件和目录/IES的任何组合,并解压缩一个或多个压缩文件。 现在我刚刚完成了GUI和zip Funtion。但是zip funtion似乎不能正常工作,产生的zip文件不知何故被破坏了。我找不到问题到底出在哪里。它似乎与函数或函数有关。 当我测试该程序时,输出如下: 归档:找不到test1.zip中央目录结束签名。要么这个文件不

  • 问题内容: 我想知道是否可以对特定网址进行ajax发布请求,并且仅应要求在数据中接收zip文件?还是我必须发送两个请求…一个,是为了使已创建的服务器内的zip文件的URL成为另一个,而另一个要下载该zip文件? 问题答案: 本机答案是否定的! 但是你可以这样做。 您的ajax请求: 您的php文件: