2013-08-12 63 views
11

Tôi cần xem trước hình ảnh trước khi gửi biểu mẫu. Tôi làm việc với Rails 3 và cần một cái gì đó tương thích với trình duyệt. Bất kỳ ý tưởng nào tôi có thể đạt được điều đó?Rails 3: cách tốt nhất để xem trước hình ảnh trước khi tải lên

+1

Bạn nên xem: http://blueimp.github.io/jQuery-File-Upload/. Tôi biết ... đó là một công cụ JQuery và không phải là một Gem hoặc một tính năng biểu mẫu đặc biệt. Nhưng! Nó thực sự dễ sử dụng và nó tích hợp rất tốt trong RoR ... Thêm vào đó, nó sẽ nâng cao trải nghiệm người dùng của bạn! Nếu bạn không quan tâm đến việc sử dụng plugin này, tôi vẫn có thể đăng câu trả lời và giải thích cách bạn có thể đạt được những gì bạn muốn làm như tôi đã thực hiện nó cho một dự án. :) – Kulgar

+0

Cảm ơn bạn đã trả lời Kulgar. Tôi đã kiểm tra đá quý nhưng nó thực sự không phù hợp với nhu cầu của tôi. Tôi thực sự chỉ muốn hiển thị một hình ảnh được tải lên trước khi người dùng nhấn nút gửi. Tôi đã không tìm thấy một giải pháp hoạt động trên safari. – Henri

+0

Ok, tôi sẽ đăng câu trả lời của tôi. :) – Kulgar

Trả lời

29

Vì vậy! :) Ý tưởng chính là sử dụng lớp Javascript FileReader, điều này thực sự thuận tiện cho những gì bạn cần làm.

Bạn chỉ cần nghe sự kiện "thay đổi" trên tệp nhập của bạn và sau đó gọi phương thức sẽ sử dụng phương thức "readAsDataURL()" của lớp FileReader. Sau đó, bạn chỉ cần điền vào nguồn của "thẻ img xem trước" với kết quả trả về của phương thức ...

Tôi đã viết cho bạn một số simple jsFiddle đạt được những gì bạn muốn. Bạn có thể xem mã của tôi dưới đây:

<!-- HTML Code --> 
<div class="upload-preview"> 
    <img /> 
</div> 
<input class="file" name="logo" type="file">  
//JS File 
$(document).ready(function(){ 
    var preview = $(".upload-preview img"); 

    $(".file").change(function(event){ 
     var input = $(event.currentTarget); 
     var file = input[0].files[0]; 
     var reader = new FileReader(); 
     reader.onload = function(e){ 
      image_base64 = e.target.result; 
      preview.attr("src", image_base64); 
     }; 
     reader.readAsDataURL(file); 
    }); 
}); 

Và trong Tài liệu Mozilla, bạn có another example (chắc chắn mạnh mẽ hơn). Giải pháp này sẽ hoạt động với Safari (phiên bản 6.0+).

Đây là cách duy nhất tôi biết để xem trước hình ảnh trước khi gửi biểu mẫu, nhưng tôi nghĩ đó là cách khá phổ biến. Tất nhiên nó không có gì để làm với Ruby On Rails vì chúng tôi chỉ sử dụng Javascript ở đây ... Nó sẽ không thể làm điều đó bằng cách sử dụng Rails chỉ như bạn sẽ phải tải lên hình ảnh trước khi vẽ nó. (Vì Rails là phía máy chủ, tôi nghĩ bạn hoàn toàn hiểu tại sao. :))

+0

Rất cám ơn câu trả lời của bạn. Tôi sẽ cố gắng thực hiện nó ngay hôm nay :) – Henri

+0

Hi Kulgar, tôi có cần phải cài đặt bất cứ thứ gì (như jquery) để sử dụng đoạn mã trên không? – learner

+0

Ngoài ra hãy cho tôi biết nơi tôi phải viết các mã này. Tôi có nghĩa là trong đó tập tin tôi phải viết javascript ** (theo tài sản/javascript/controller_name.js?) ** Và trong đó tập tin tôi phải viết mã html ** (bên trong app/views?) ** trong đường ray? Xin lỗi có thể là quá cơ bản của nó nhưng tôi khá mới để rails. – learner