从S3下载并不能使用RestClient

时间:2015-09-25 22:15:04

标签: ruby amazon-s3 rest-client

我有一个压缩图像的文件。它在Windows上的磁盘大小为125,966,232字节。我使用Ruby aws-S3 gem将它上传到S3。它在S3上的大小,从属性窗格,也是125,966,232字节。

当我使用网络浏览器和图片的公共URL将其下载到磁盘时,它下载得很好,并且其大小是一致的。它还使用我的解压缩实用程序解压缩。

当我使用RestClient(1.6.7)将文件从S3存储桶下载到磁盘时,下载后其在磁盘上的大小为126,456,885字节,大890,653字节。这个成功的下载无法使用我的解压缩实用程序解压缩,并且使用相同的S3文件重复运行此下载会获得一个下载文件,该文件的大小始终为126,456,885字节。

require 'rest_client'
local_file = "C:\\test\\test_download.cap"
s3_bucket = "my-bucket-not"
remote_S3_file_url = "https://s3.amazonaws.com/#{s3_bucket}/test_download.cap"
File.open(local_file, "w") do |f|
    f.write RestClient.read remote_S3_file_url
end

我需要做些什么来确保下载的文件大小完全相同和/或正确解压缩?

1 个答案:

答案 0 :(得分:1)

我建议不要将文件保存为文本,而是保存为二进制文件。

您正在使用:

File.open(local_file, "w")

'w'表示:

"w"  Write-only, truncates existing file
     to zero length or creates a new file for writing.

使用'wb'模式来保存文件。如果没有'b',则行尾将转换为Windows格式,从而有效地膨胀大小并破坏文件内容:

"b"  Binary file mode
     Suppresses EOL <-> CRLF conversion on Windows. And
     sets external encoding to ASCII-8BIT unless explicitly
     specified.

所以使用:

File.open(local_file, 'wb')

有关详细信息,请参阅“IO Open Mode”。