使用 RestClient 从 S3 下载不起作用

Download from S3 doesn't work using RestClient

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

当我使用网络浏览器和图像 public URL 将其下载到磁盘时,它下载正常,并且大小一致。它还可以使用我的解压缩实用程序很好地解压缩。

当我使用RestClient(1.6.7)将文件从S3 bucket下载到磁盘时,下载后它在磁盘上的大小是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

我必须怎么做才能确保下载的文件大小完全相同and/or正确解压缩?

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

您正在使用:

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”。