Tôi đang sử dụng jpegcam để cho phép người dùng chụp ảnh webcam để đặt làm ảnh tiểu sử của họ. Thư viện này kết thúc đăng các dữ liệu thô để các sever mà tôi nhận được trong điều khiển đường ray của tôi như vậy:Cách lưu ảnh raw_data bằng kẹp giấy
def ajax_photo_upload
# Rails.logger.info request.raw_post
@user = User.find(current_user.id)
@user.picture = File.new(request.raw_post)
này không hoạt động và kẹp giấy/ray thất bại khi bạn cố gắng tiết kiệm request.raw_post.
Errno::ENOENT (No such file or directory - ????JFIF???
Tôi đã nhìn thấy các giải pháp mà làm cho một tập tin tạm thời nhưng tôi muốn được tò mò muốn biết nếu có một cách để có được Kẹp giấy để tự động lưu các request.raw_post w/o phải thực hiện một tempfile. Bất kỳ ý tưởng hay giải pháp thanh lịch nào?
SOLUTION xấu xí (Yêu cầu một tập tin temp)
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
Đây là xấu xí như nó đòi hỏi một tập tin tạm thời được lưu trên máy chủ. Lời khuyên về cách thực hiện điều này xảy ra với tập tin tạm thời cần được lưu? StringIO có thể được sử dụng không?
Bạn nhận ra rằng việc sử dụng FileSystem là một cách hoàn toàn hợp lệ để thực hiện công việc đúng không? Trong thực tế, hệ thống unix gần như hoàn toàn dựa trên hệ thống FileSystem, đó là toàn bộ vấn đề tại sao/dev/null tồn tại. Một mối quan tâm hợp lệ hơn tôi có về giải pháp này là nó rất dễ bị tình trạng chủng tộc. –
Chắc chắn nó hợp lệ nhưng tạo ra một tập tin có nghĩa là tôi sau đó cần một công việc cron để xóa tất cả các tập tin tạm thời, nếu điều đó không xảy ra có thể dẫn đến việc tải lên HD và đâm máy chủ. Tại sao có một điều nữa phải lo lắng? Tôi rất quan tâm đến việc giải quyết một cách tao nhã w/o này cần một tập tin tạm thời. Ít bộ phận chuyển động hơn? – AnApprentice
@AnApprentice, với các tệp cũ của lớp Tempfile' được dọn dẹp bởi bộ thu gom rác. Xem câu trả lời của tôi dưới đây. – Mischa