我正在使用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文件,每次都可以正常工作。我会深入研究这一点。谢谢你的帮助。
答案 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