1

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

4

1 に答える 1

3

いくつかの調査と私のいとこからのヒントの後、私はついにこれを機能させることができました。

アマゾンからファイルをロードしてディスクに書き込むためにawsソリューションを使用する代わりに(奇妙なPDFファイルを生成していました:明らかに元のファイルと同じですが、コンテンツが空白で、Adobe Readerを開くと「修正」されます)私は代わりに現在、SSLを無視してopen-uriを使用しています。

これが私の一日を作った最後のコードです:

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
于 2012-09-10T15:11:49.710 に答える