2011-08-26 38 views
7

Tôi đang sử dụng Ruby on Rails v3.0.9 và tôi muốn kiểm tra xem hình ảnh (trong trường hợp của tôi là hình ảnh biểu tượng favicon.ico) được truy xuất thành công từ trang web và nếu không tôi muốn hiển thị hình ảnh tùy chỉnh.Làm thế nào để kiểm tra xem một hình ảnh đã được tìm thấy trên một trang web?

Để lấy favicon.ico hình ảnh liên quan đến một trang web, trong tập tin quan điểm của tôi tôi có:

image_tag "#{web_site.link}/favicon.ico", :size => "16x16" 

nơi web_site.link giá trị này là một cái gì đó như sau:

http://stackoverflow.com/ 
http://www.stackoverflow.com/ 
http://facebook.com/ 
... 

Làm thế nào để kiểm tra xem một hình ảnh đã được tìm thấy trên một trang web (có thể sử dụng câu lệnh if ... else ... end hoặc thực hiện một số yêu cầu HTTP trước để xử lý hình ảnh favicon) và cách xử lý kịch bản trên?

Trả lời

6

Dưới đây là cách triển khai ý tưởng bạn có trong câu hỏi gốc.

Vấn đề với cách tiếp cận này sẽ là thời gian phản hồi của bạn sẽ bao gồm mất nhiều thời gian để miền khác phản hồi yêu cầu của bạn về hình ảnh. Nếu trang web đó gặp sự cố thì trang của bạn sẽ không tải cho đến khi yêu cầu hết thời gian chờ.

<% 
img_url = 'http://adomain.com/image.jpg' 
res = Net::HTTP.get_response(URI.parse(img_url)) 
img_url = '[my alternate url]' unless res.code.to_i >= 200 && res.code.to_i < 400 #good codes will be betweem 200 - 399 
%> 

<%=image_tag img_url%> 

Phương pháp tiếp cận jQuery liên quan nhiều hơn một chút. Tôi muốn đề nghị một cái gì đó dọc theo sau:

  • tạo ra một thẻ <img> với một hình ảnh spacer suốt
  • trong javascript của trang chạy một cuộc gọi $.ajax cho hình ảnh từ xa
    • trong callback thành công thay thế <img> src với url của hình ảnh từ xa
    • trong trường hợp gọi lại không thành công, thay thế src <img> bằng url của hình ảnh dự phòng

Thật không may, tôi không có thời gian để tạo mã chính xác cho điều này ngay bây giờ.

+0

"Rất tiếc, tôi không có thời gian để tạo mã chính xác cho điều này ngay bây giờ". : '- (... Tôi sẽ cố gắng tự mình ... – Backo

+0

Tại sao bạn sử dụng 'to_f' ở đây? Có thể mã trạng thái là một float thay vì int? – new2cpp

+0

@ new2cpp không có ý tưởng tại sao tôi sử dụng' to_f', chỉnh sửa phản ứng –

-1

Bạn không thể làm điều này với Rails trừ khi bạn tìm nạp phía máy chủ hình ảnh trước khi hiển thị trang. Những gì bạn có thể làm là tìm nạp nó trong ứng dụng khách bằng JavaScript và nếu có sự cố khi truy xuất nó, hãy chuyển sang một giải pháp thay thế.

+0

Làm cách nào tôi có thể tìm nạp phía máy chủ hình ảnh trước khi hiển thị trang bằng JavaScript (Tôi đang sử dụng jQuery 1.6)? – Backo

+0

Bạn có các tùy chọn trong cả hai trường hợp, nhưng đá quý [curb] (http://curb.rubyforge.org/) có thể là lựa chọn tốt nhất. Ngoài ra, nó còn tải xuống phía máy chủ * hoặc * phía máy khách với JavaScript, không phải cả hai. Nó chỉ là một người nào đó phải xác minh liên kết hoạt động, bạn chỉ cần chọn ai. Nếu bạn đang làm phía máy chủ này, bạn có thể muốn chạy nó như là một tiến trình nền để điền vào một bảng ánh xạ. – tadman

+0

Tại sao bạn khuyên tôi sử dụng đá quý 'lề đường' chứ không phải thư viện chuẩn của Ruby? – Backo

Các vấn đề liên quan