Zip 文件在使用节点和 AWS lambda 从 SFTP 服务器发布到 S3 后无法展开
Posted
技术标签:
【中文标题】Zip 文件在使用节点和 AWS lambda 从 SFTP 服务器发布到 S3 后无法展开【英文标题】:Zip file unable to expand after being posted to S3 from SFTP server using node and AWS lambda 【发布时间】:2016-11-02 22:41:25 【问题描述】:从 sftp 服务器读取压缩文件并将其发布到 S3 后,无法下载和读取文件。尝试解压缩文件时来自控制台的错误如下:
unzip -l 7375_FAIL_test_20160626_185904.txt.zip
Archive: 7375_FAIL_test_20160626_185904.txt.zip
warning [7375_FAIL_test_20160626_185904.txt.zip]: 4 extra bytes at beginning or within zipfile
(attempting to process anyway)
error [7375_FAIL_test_20160626_185904.txt.zip]: start of central directory not found;
zipfile corrupt.
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)
从sftp读取文件的js代码在这里:
.then(function(fileInfo)
return sftp.openAsync(dir + '/' + fileInfo.filename, 'r')
.then(function(handle)
console.log(fileInfo.attrs.size)
var result = new Buffer(fileInfo.attrs.size);
return sftp.readAsync(handle, result, 0, fileInfo.attrs.size, 0)
.then(function(data)
return process(result.toString());
)
.then(function(data)
return sftp.closeAsync(handle)
.then(function()
return data;
);
)
对为什么会发生4 extra bytes at beginning or within zipfile
或如何解决此问题有任何想法吗?
谢谢!
【问题讨论】:
我想做几乎同样的事情。你能和我分享一下 lambda 代码吗?之后我可能会调试并帮助你。process()
是您将代码上传到 S3 的位置吗?如果是这样,您可能不应该在result
上调用.toString()
。
@AkarshSatija 不幸的是,repo 是私有的,但它实际上只是 github.com/gilt/s3-sftp-bridge 的定制版本
@robertklep 现在有一个奇怪的问题,即使用 putObject 设置为 s3 的大文件正在以某种方式被修剪,因此 650kb 的文件最终在 s3 中为 638kb。然后,有些文件已损坏,有些则没有。我测试过,在正文中为 s3.putObject 传递的文件大小是正确的大小,因此截断肯定发生在 AWS SDK 过程中。有什么想法吗?
@weilandia 我想这取决于该文件如何准确地传输到 S3,如果没有代码很难说问题可能是什么。
【参考方案1】:
您可以尝试https://www.cloudzipinc.com/,它将多种不同格式的存档从 S3 扩展为存储桶中的目标前缀,并且可以将 FTP 站点复制到 S3。我用它把数字目录从 FTP 移动到 S3。
【讨论】:
以上是关于Zip 文件在使用节点和 AWS lambda 从 SFTP 服务器发布到 S3 后无法展开的主要内容,如果未能解决你的问题,请参考以下文章
使用带有 Node.js 的 AWS Lambda 函数从 S3 存储桶中提取 zip 文件并上传到另一个存储桶
使用 Lambda 节点从 S3 上的文件在 S3 上创建一个 zip 文件
如何正确创建可以使用 Eclipse 上传到 AWS lambda 的 zip 文件?
从 s3 存储桶获取 2 个文件,并在使用 lambda 节点 js 将其上传到 s3 存储桶后制作 1 个 zip 文件