1

Ruby on Rails では、ユーザーがファイルをアップロードできるようにしています。私はいくつかのことを行い、これを obj = bucket.objects[filename].write(request.body.read) で Amazon S3 に渡したいと考えています。

request.body.read または request.raw_post を使用できると思っていましたが、ペイロードには Content-Disposition や Content-Type などのすべてのメタデータが含まれています。ユーザーがアップロードしたものとまったく同じペイロードの一部を取得するにはどうすればよいですか?

例えばこれはrequest.body.readなのですが、「ˇÿˇ‡JFIF…」から始まる部分だけが欲しいのです。

------WebKitFormBoundaryWc3LdZGmhHmhJeuT
Content-Disposition: form-data; name="file"; filename="test.jpg"
Content-Type: image/jpeg

ˇÿˇ‡JFIFHHˇ·...
...more data...
------WebKitFormBoundaryWc3LdZGmhHmhJeuT--
4

1 に答える 1

-1

params にファイル オブジェクトがあります。あなたの場合はparams[:file].

paramsハッシュ内のオブジェクトは、 のサブクラスのインスタンスですIO。アップロードされたファイルのサイズに応じて、(一時ファイル)StringIOのインスタンスまたはインスタンスである可能性があります。File

どちらの場合も、オブジェクトにはoriginal_filename、ユーザーのコンピューター上にあったファイルの名前を含むcontent_type属性と、アップロードされたファイルの MIME タイプを含む属性があります。

ファイルの内容を読み取るには、 を呼び出しますread

uploaded_file = params[:file]

uploaded_file.original_filename 
#=> test.jpg

uploaded_file.read 
#=> file content ("ˇÿˇ‡JFIFHHˇ...")

ファイルのアップロードについて詳しくは、Rails ガイドをご覧ください。

于 2013-10-13T21:46:28.617 に答える