我正在使用jpegcam,允许用户拍摄网络摄像头照片并将其设置为其个人资料照片。该库最终会将原始数据发布到服务器上,我可以在我的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时,它不能正常工作,而且paperclip/rails也会失败。
Errno::ENOENT (No such file or directory - ????JFIF???
我看到过一些解决方案可以创建一个临时文件,但我很好奇是否有一种方法可以让Paperclip自动保存request.raw_post而不必创建临时文件。是否有优雅的想法或解决方案? < p > < strong > 丑陋的解决方案(需要临时文件)
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吗?
Tempfile
类可以通过垃圾回收器清理旧文件。请参见下面的答案。 - Mischa