2017-10-07 1 views
0

特定のURLにある画像からファイルオブジェクトを作成したいと思います。ファイルを読み込み、file変数にで保存しようとするとしかし、私はArgumentError: string contains null byteを得るURLのファイルオブジェクト

img = Net::HTTP.get_response(URI.parse('https://prium-solutions.com/wp-content/uploads/2016/11/rails-1.png')) 
file = File.read(img.body) 

:私はネットhttpでファイルをダウンロードしています。

これをローカルに保存せずにどうすればいいですか?

+0

は、ソリューションの仕事をしましたか? –

+0

@AniketShivamTiwariかもしれませんが、私は「ローカルに保存する必要はありません」という質問で指定しました。一時ファイルを使用しているため、 –

+0

には格納されません。一度試してみてください –

答えて

1

Fileはストレージからの読み込みを処理するため、ここでは実際には適用されません。 readメソッドでは、読み込む場所を渡すことを期待しており、バイナリデータを渡しています。

あなたがストリーミングされているオブジェクトを期待ライブラリとのインターフェイスに必要な状況を持っている場合、あなたはStringIOオブジェクト内の文字列本体をラップすることができます

file = StringIO.new(img) 
# you can now call file.read, file.seek, file.rewind, etc. 
+0

あなたのご意見ありがとうございます。 ローカルファイルでこれを行っていたのと同じ出力を得るにはどうすればいいですか? file = File.open( "/ path/to/image.jpg") 私は同じオブジェクトが必要です。それは私のURLを介しているということです。あなたの答えでは、私はファイルオブジェクトを取得していません –

+1

@GrahamSlickアプリケーションでStringIOとFileの間の唯一の具体的な違いは、ファイルには関連性のないファイルシステム(アクセス権、パスなど)に関する情報があります実際のファイル真剣に、私があなたに与えたものを使ってみてください。エラーが発生した場合は、共有してください。これがすべて混乱している場合は、Googleの「ダックタイピング」。 – coreyward

関連する問題