ruby - 使用 aws-sdk 从 s3 下载文件。编码不对

标签 ruby pdf encoding amazon-s3

我正在尝试使用 aws-sdk 将 s3 文件加载到本地磁盘,并质疑为什么我的 pdf 文件(只有一个文本说 SAMPLE PDF)结果显然是空的内容。

我想这与编码有关...但我该如何解决呢?

这是我的代码:

require 'aws-sdk'

bucket_name = "****"
access_key_id = "***"
secret_access_key = "**"

s3=AWS::S3.new(
access_key_id: access_key_id,
secret_access_key: secret_access_key)

b = s3.buckets[bucket_name]
filen = File.basename("Sample.pdf")

path = "original/90/#{filen}"
o = b.objects[path]

require 'tempfile'

ext= File.extname(filen)

file = File.open("test.pdf","w", encoding: "ascii-8bit")
# streaming download from S3 to a file on disk

begin
file.write(o.read) do |chunk|
    file.write(chunk)
end
end
file.close

如果我取出encoding: "ascii-8bit",我只会收到一条错误消息Encoding::UndefinedConversionError: "\xC3"from ASCII-8BIT to UTF-8

最佳答案

经过一些研究和我堂兄的提示后,我终于让它工作了。

而不是使用 aws 解决方案从亚马逊加载文件并将其写入磁盘(生成一个奇怪的 pdf 文件:显然与原始文件相同,但内容空白,Adobe Reader 在打开时“修复”它) 相反,我现在使用 open-uri,忽略 SSL。

这是让我开心的最终代码:

require 'open-uri'
open('test.pdf', 'wb') do |file|
  file << open('https://s3.amazon.com/mybucket/Sample.pdf',:ssl_verify_mode => OpenSSL::SSL::VERIFY_NONE).read
end

关于ruby - 使用 aws-sdk 从 s3 下载文件。编码不对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12352230/

相关文章:

ruby-on-rails - 回到 rails 的最快方法

ruby - 为什么变量名不能以 `?` 结尾,而方法名可以?

jquery - Ruby on Rails 安装 JQuery

ruby - 获取需要文件的父路径,Ruby

android - 使用 Android 4.4 打印框架打印多个 PDF 页面

python - 非 ASCII 编码文件中的换行符

linux - 寻找将 PDF 转换为图像和文本(或 html)的工具

java - 如何使用 PDFBox 从 PDF 中提取数据时用单词替换空格

python - 修复损坏的编码(使用 Python)

python - 将列表中的字典键从 unicode 编码为 ascii