上传到S3期间ZIP文件损坏

时间:2013-05-29 15:46:32

标签: node.js amazon-s3 zip knox-amazon-s3-client

我正在使用node.js和knox的putFile将zip文件上传到S3。原始zip打开正常,S3的zip下载已损坏。

这是我正在使用的相关代码:

var client = knox.createClient({
    key: 'MY KEY HERE', 
    secret: 'MY SECRET HERE', 
    bucket: 'MY BUCKET HERE'
});

var filename = 'example.zip';

var req = client.putFile(filename, filename, { 'x-amz-acl': 'public-read' }, function(err, res){
    if (res.statusCode == 200) {
        console.log('moved '+filename+' to s3');
    }
    else {
        console.log('failed to move to s3');
    }
});

这是我在OSX上使用zip终端尝试修复zip文件时得到的输出

> zip -F remote.zip --out fixed-remote.zip
Fix archive (-F) - assume mostly intact archive
zip warning: bad archive - missing end signature
zip warning: (If downloaded, was binary mode used?  If not, the
zip warning:  archive may be scrambled and not recoverable)
zip warning: Can't use -F to fix (try -FF)
zip error: Zip file structure invalid (remote.zip)

> zip -FF remote.zip --out fixed-remote.zip
zip warning: Missing end (EOCDR) signature - either this archive is not readable or the end is damaged
> Is this a single-disk archive?  (y/n): y
Assuming single-disk archive
[LISTS ALL FILES COPIED HERE]
zip warning: no end of stream entry found: awesome-file.jpg
zip warning: rewinding and scanning for later entries

我完全不知道为什么会发生这种情况。几乎看起来好像最后几个字节不是由knox发送的,但这是一个完全的菜鸟猜测。

有人有什么想法吗?

更新

我认为生成ZIP文件可能是一个问题,而不是上传。我尝试上传由OSX Zip Utility生成的zip文件,每次都可以正常工作。我会深入研究这一点。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

当没有明确指定区域选项时,putFile和putStream等便利API目前无法在美国标准以外的区域中按预期工作。

确保添加您的地区: https://github.com/LearnBoost/knox#region

var client = knox.createClient({
    key: 'MY KEY HERE', 
    secret: 'MY SECRET HERE', 
    bucket: 'MY BUCKET HERE',
    region: 'us-standard'
});
好像有用吗?文件大小对我来说是一样的: 的输出:

node aws.js 
{ Name: 'MYBUCKET',
  Prefix: '',
  Marker: '',
  MaxKeys: 1000,
  IsTruncated: false,
  Contents: 
   [ { Key: 'hudson_out.jpg',
       LastModified: Wed May 29 2013 12:38:50 GMT-0400 (EDT),
       ETag: '"996f46db285c900f3e1596d484a72fb4"',
       Size: 1690706,
       Owner: [Object],
       StorageClass: 'STANDARD' } ] }
moved hudson_out.jpg to s3

ls -la hudson_out.jpg -rw-r - r - @ 1(stuff)1690706 2012年8月31日hudson_out.jpg