Tôi có một URL đến một hình ảnh mà tôi muốn lưu cục bộ, để tôi có thể sử dụng Kẹp giấy để tạo hình thu nhỏ cho ứng dụng của mình. Cách tốt nhất để tải xuống và lưu hình ảnh là gì? (Tôi đã xem xét xử lý tệp ruby nhưng không gặp bất kỳ điều gì.)Làm cách nào để tải xuống tệp từ URL và lưu tệp trong Rails?
Trả lời
Hãy thử điều này:
require 'open-uri'
open('image.png', 'wb') do |file|
file << open('http://example.com/image.png').read
end
Kiểm tra Net::HTTP trong thư viện chuẩn. Tài liệu cung cấp một số ví dụ về cách tải xuống tài liệu bằng cách sử dụng HTTP.
Nếu bạn đang sử dụng kẹp giấy, tải từ một URL bây giờ được xử lý tự động.
Giả sử bạn đã có một cái gì đó như:
class MyModel < ActiveRecord::Base
has_attached_file :image, ...
end
Mở mô hình của bạn, chỉ cần chỉ định hình ảnh dưới dạng URL, một cái gì đó như thế này (viết bằng ý longhand):
@my_model = MyModel.new
image_url = params[:image_url]
@my_model.image = URI.parse(image_url)
Bạn' có lẽ sẽ muốn đặt điều này trong một phương thức trong mô hình của bạn. Điều này cũng sẽ làm việc tốt trên hệ thống tập tin tạm thời của Heroku.
Kẹp giấy sẽ lấy từ đó.
nguồn: paperclip documentation
Đối với những người tìm kiếm trong tương lai, Paperclip không còn cho phép điều này theo mặc định: https://medium.com/in-the-weeds/all-about-paperclips -cve-2017-0889-server-side-request-forgery-ssrf-vulnerability-8cb2b1c96fe8 –
Một phiên bản thậm chí ngắn hơn:
require 'open-uri'
download = open('http://example.com/image.png')
IO.copy_stream(download, '~/image.png')
Để giữ cho tên tập tin giống nhau:
IO.copy_stream(download, "~/#{download.base_uri.to_s.split('/')[-1]}")
Và hiệu quả hơn vì đầu ra không được lưu dưới dạng chuỗi trong bộ nhớ. +1 –
Mặc dù nó thực sự hữu ích khi cả hai câu trả lời được hiển thị, vì vậy những người như tôi có thể thấy cả hai, hãy nghĩ về sự khác biệt và sau đó chọn câu trả lời này một cách có ý thức vì những lý do đúng :) –
Tôi nghĩ rằng đây là cách rõ ràng nhất:
require 'open-uri'
File.write 'image.png', open('http://example.com/image.png').read
- 1. Tải xuống và lưu tệp trong JMeter
- 2. cách tải xuống tệp từ url và lưu trữ trong thư mục tài liệu
- 3. Python: Tải xuống tệp Zip được trả về từ URL
- 4. Làm cách nào để tải xuống tệp zip trong C#?
- 5. Cách tải xuống tệp từ Google Drive
- 6. Làm cách nào để tải xuống Tệp từ EC2
- 7. Làm cách nào để lưu trữ tệp đã tải xuống bằng Java và Jersey?
- 8. Tải xuống tệp đơn
- 9. Tải xuống tệp Curl với url var
- 10. php - Làm cách nào để tải xuống tệp?
- 11. Tải xuống tệp từ máy chủ php
- 12. Cách tải xuống tệp từ internet và lưu trong 'Tài liệu' trên iPhone?
- 13. cách tải xuống tệp trong java?
- 14. Tải xuống tệp từ DataURL trong JavaScript
- 15. Tải xuống tệp pdf từ wikipedia
- 16. Làm cách nào để buộc grails tải xuống tệp csv?
- 17. Lấy tên tệp từ tệp tải xuống http
- 18. AFNetworking - lưu tệp đã tải xuống
- 19. Làm cách nào để trích xuất một tệp đơn lẻ từ tệp lưu trữ từ xa?
- 20. Làm cách nào để tự động tải xuống tệp javascript?
- 21. Cách tải tệp từ URL sang Amazon S3
- 22. Cách tải tệp xuống WP7?
- 23. curl tải tệp từ xa và tải xuống cùng lúc
- 24. lệnh wget để tải xuống tệp và lưu dưới dạng tên tệp khác
- 25. Làm thế nào để trình duyệt web tải xuống tệp được lưu trữ trong chuỗi JavaScript?
- 26. Tải xuống tệp bằng Java
- 27. JMeter - Tệp tải lên và tệp tải xuống kịch bản
- 28. Tải xuống tệp bên trong WebView
- 29. Cách dễ nhất để tải xuống tệp?
- 30. Tạo tệp văn bản và tải xuống
Những công việc này. Cảm ơn. Tôi đã thử nó trên một hình ảnh. Hình ảnh không được ghi chính xác vào tệp. Như thể nó đã bị hỏng hay gì đó. Ngoài ra bạn có thể hướng dẫn tôi làm điều tương tự trong ứng dụng Rails. Tôi có thể sử dụng nó trong ứng dụng Rails không? –
Có, bạn có thể sử dụng nó trong ứng dụng đường ray. Các tập tin không được viết đúng cách có lẽ là vì tôi quên mở đích trong chế độ ghi nhị phân. Tôi sẽ chỉnh sửa ngay bây giờ. – Levi
cũng phải là 'tệp << mở (' http://example.com/image.png ') .read' – mraaroncruz