Tôi có một kiểu ảnh có thuộc tính hình ảnh. Hình ảnh chứa chuỗi base64 thu được từ api. Tôi cần chạy một callback after_create và tôi đã nghĩ rằng mình có thể sử dụng Paperclip để lưu hình ảnh vào đĩa trong callback vì nó sẽ tiết kiệm cho tôi một số công việc thực hiện cấu trúc thư mục trong thư mục chung và tạo thumbnail. Có cách nào dễ dàng để làm điều đó không?Sử dụng kẹp giấy để lưu hình ảnh base64 thu được từ một api
Trả lời
Để trả lời câu hỏi của riêng tôi, đây là những gì tôi đã đi lên với:
class Photo < ActiveRecord::Base
before_validation :set_image
has_attached_file :image, styles: { thumb: "x100>" }
validates_attachment :image, presence: true, content_type: { content_type: ["image/jpeg", "image/jpg"] }, size: { in: 0..10.megabytes }
def set_image
StringIO.open(Base64.decode64(image_json)) do |data|
data.class.class_eval { attr_accessor :original_filename, :content_type }
data.original_filename = "file.jpg"
data.content_type = "image/jpeg"
self.image = data
end
end
end
image_json là một lĩnh vực văn bản có chứa các hình ảnh thực tế base64 mã hóa (chỉ là một phần dữ liệu, ví dụ: "/ 9j/4AAQSkZJRg ... ")
set_image của bạn sẽ giống như thế này
require 'RMagick'
data = params[:image_text]# code like this data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABPUAAAI9CAYAAABSTE0XAAAgAElEQVR4Xuy9SXPjytKm6ZwnUbNyHs7Jc7/VV9bW1WXWi9q
image_data = Base64.decode64(data['data:image/png;base64,'.length .. -1])
new_file=File.new("somefilename.png", 'wb')
new_file.write(image_data)
Sau khi bạn kan sử dụng i pháp sư như tập tin Photo.new (ảnh: hình ảnh) #save useng kẹp giấy trong mô hình Ảnh
Ít nhất với Kẹp giấy 5 nó hoạt động ra khỏi hộp bạn cần cung cấp chuỗi base64 với định dạng data:image/jpeg;base64,#{base64_encoded_file}
Đối với bạn mô hình nó sẽ được
Photo.new(
image: "data:image/jpeg;base64,#{image_json}",
image_file_name: 'file.jpg' # this way you can provide file_name
)
Ngoài ra trong bộ điều khiển của bạn, bạn không cần phải thay đổi bất cứ điều gì :-) (có thể bạn muốn chấp nhận :image_file_name
trong params
)
Loại nội dung có chấm bên trong được cố định khoảng 4.2, các phiên bản cũ hơn cũng hỗ trợ bộ điều hợp base64, nhưng chỉ cho các loại nội dung dễ dàng (sửa là thay thế regex) – Vasfed
Theo Paperclip 5.2, bạn cần phải đăng ký DataUriAdapter cho Paperclip để xử lý hình ảnh base64 cho bạn.
Trong config/initializers/kẹp giấy đặt: Paperclip::DataUriAdapter.register
Rồi như @eldi nói rằng bạn chỉ có thể làm:
Photo.new(
image: "data:image/jpeg;base64,#{image_json}",
image_file_name: 'file.jpg' # this way you can provide file_name
)
(Xem Kẹp giấy ghi chú phát hành here)
- 1. Lưu tệp bằng cách sử dụng kẹp giấy qua API
- 2. Cách lưu ảnh raw_data bằng kẹp giấy
- 3. Cách sử dụng url hình ảnh gốc trong kẹp giấy
- 4. Cách thu nhỏ một trang nhiều pdf với kẹp giấy
- 5. Sử dụng Kẹp giấy trong seeds.rb
- 6. tạo hình thu nhỏ bằng cách sử dụng đá quý kẹp giấy
- 7. Kẹp giấy lấy hình ảnh trực tiếp qua url
- 8. Kẹp giấy + Active_admin + Rails 3.0.10 nhiều hình ảnh
- 9. Quy trình đăng kẹp giấy - Cách nén hình ảnh bằng cách sử dụng jpegoptim/optpng
- 10. Lưu hình ảnh trong cơ sở dữ liệu bằng cách sử dụng plugin kẹp giấy đường ray
- 11. ký hiệu kích thước hình ảnh kẹp giấy
- 12. Sử dụng tập tin đính kèm duy nhất cho video/hình ảnh trong kẹp giấy
- 13. 'Kẹp giấy :: AdapterRegistry :: NoHandlerError` khi tôi gửi một hình ảnh từ đến đường ray từ một ứng dụng iphone
- 14. Kẹp giấy: Cách lưu trữ ảnh trong bảng điều khiển Rails?
- 15. Làm cách nào để chỉ đặt chiều rộng cho hình ảnh được tải lên kẹp giấy?
- 16. Sử dụng kẹp giấy với cô gái nhà máy, không có lỗi xử lý hình ảnh
- 17. mọi lần đẩy vào heroku, hình ảnh không được hiển thị, kẹp giấy
- 18. Kẹp giấy - đổi tên file trước khi lưu
- 19. Add kẹp giấy phong cách mới không ảnh hưởng đến hình ảnh được tải lên cũ
- 20. Sử dụng đá quý kẹp giấy trong đường ray3
- 21. sử dụng hình ảnh base64 với Carrierwave
- 22. lỗi Kẹp giấy - NotIdentifiedByImageMagickError
- 23. đường ray kẹp giấy ảnh mặc định với S3
- 24. Đường ray Kiểu kẹp giấy đa hình
- 25. Sao chép ảnh vào giai đoạn S3 (sử dụng đường ray và kẹp giấy)
- 26. Kẹp giấy/Hành khách NotIdentifiedByImageMagickError:
- 27. Sửa đổi hình ảnh thu được từ loopback-component-storage
- 28. Kẹp giấy có thể đọc hình học hình ảnh ngoài thùng S3 không?
- 29. php imagick - đọc hình ảnh từ base64
- 30. Cắt xén đơn giản bằng kẹp giấy
hi, từ quan điểm u đã vượt qua chuỗi được mã hóa như là một lĩnh vực ẩn để điều khiển? và từ bộ điều khiển những gì bạn đã làm gì? –
không có gì đặc biệt, chỉ cần một cái gì đó như Photo.create! (Image_json: i) nơi tôi là dữ liệu từ các băm params có chứa chuỗi base64 – maprihoda
Điều này là rất tốt, cảm ơn! – ipd