我有一个压缩图像的文件。它在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
我需要做些什么来确保下载的文件大小完全相同和/或正确解压缩?
答案 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”。