Tôi đang cố gắng tìm hiểu làm thế nào tôi có thể xác minh những gì tôi đang ăn vào carrierwave thực sự là một hình ảnh. Nguồn tôi nhận được url hình ảnh của tôi từ không cho tôi trở lại tất cả các url trực tiếp. Một số hình ảnh không còn tồn tại nữa. Thật không may nó không thực sự trả về mã trạng thái đúng hoặc bất cứ điều gì vì tôi đã sử dụng một số mã để kiểm tra xem tập tin từ xa tồn tại và nó đã vượt qua kiểm tra đó. Vì vậy, bây giờ chỉ để được ở bên an toàn tôi muốn một cách để xác minh tôi đang nhận lại một tập tin hình ảnh hợp lệ trước khi tôi đi trước và tải về nó.Xác minh một hình ảnh từ xa thực sự là một tệp hình ảnh trong ruby?
Đây là mã kiểm tra tệp từ xa mà tôi đã sử dụng chỉ để tham khảo nhưng tôi thích thứ gì đó thực sự có thể xác định rằng tệp là hình ảnh.
require 'open-uri'
require 'net/http'
def remote_file_exists?(url)
url = URI.parse(url)
Net::HTTP.start(url.host, url.port) do |http|
return http.head(url.request_uri).code == "200"
end
end
tôi đã kết thúc kiểm tra mã trạng thái đầu tiên chỉ để chắc chắn rằng nó là 200 sau đó sử dụng của bạn mã. Vì vậy, một cái gì đó như 'return (head.code ==" 200 ")? head ['Content-Type']. start_with? ('image'): false' – hadees
Điều đó sẽ hiệu quả. Bạn cũng nên hỏi nhà cung cấp dịch vụ tại sao họ trả lại mã trạng thái 200 khi tài nguyên không thực sự tồn tại. –
Vâng, đó là một câu hỏi hay nhưng tôi đoán chúng không đủ kỹ thuật để trả lời. Ngoài ra tôi không có quyền truy cập trực tiếp vào chúng. Hy vọng rằng điều này sẽ làm việc cho hầu hết các trường hợp. – hadees