私はjpegcamを使用して、ユーザーがWebカメラの写真を撮ってプロフィール写真として設定できるようにしています。このライブラリは、次のようにRailsコントローラーで取得したサーバーに生データを投稿することになります。
def ajax_photo_upload
# Rails.logger.info request.raw_post
@user = User.find(current_user.id)
@user.picture = File.new(request.raw_post)
request.raw_postを保存しようとすると、これは機能せず、ペーパークリップ/レールは失敗します。
Errno::ENOENT (No such file or directory - ????JFIF???
一時ファイルを作成するソリューションを見てきましたが、一時ファイルを作成しなくても、Paperclipでrequest.raw_postを自動的に保存する方法があるかどうか知りたいと思います。そこにエレガントなアイデアや解決策はありますか?
醜い解決策(一時ファイルが必要)
class ApiV1::UsersController < ApiV1::APIController
def create
File.open(upload_path, 'w:ASCII-8BIT') do |f|
f.write request.raw_post
end
current_user.photo = File.open(upload_path)
end
private
def upload_path # is used in upload and create
file_name = 'temp.jpg'
File.join(::Rails.root.to_s, 'public', 'temp', file_name)
end
end
サーバーに一時ファイルを保存する必要があるため、これは醜いです。保存する必要のある一時ファイルなしでこれを実現するためのヒントはありますか?StringIOは使用できますか?