2012-06-10 36 views
5

Tôi đã sử dụng Blueimp jQuery File Upload trong ứng dụng Rails của mình. Khi người dùng chọn tệp, tôi muốn hiển thị hình thu nhỏ của hình ảnh và tên của hình ảnh trước khi tải tệp lên máy chủ.Tải lên tệp Blueimp Jquery: Không hiển thị hình ảnh xem trước hình thu nhỏ

Tôi đã giới thiệu demo để tùy chỉnh plugin này. Tôi có thể in tên của tệp trên màn hình nhưng không thể hiển thị hình thu nhỏ.

Đây là html tạo

<!DOCTYPE html> 
<html> 
<head> 
    <title>Fileupload</title> 
    <link href="/assets/application.css?body=1" media="all" rel="stylesheet" type="text/css" /> 
<link href="/assets/jquery.fileupload-ui.css?body=1" media="all" rel="stylesheet" type="text/css" /> 
<script src="/assets/jquery.js?body=1" type="text/javascript"></script> 
<script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script> 
<script src="/assets/jquery.ui.widget.js?body=1" type="text/javascript"></script> 
<script src="/assets/application.js?body=1" type="text/javascript"></script> 
<script src="/assets/jquery.tmpl.js?body=1" type="text/javascript"></script> 
<script src="/assets/load-image.min.js?body=1" type="text/javascript"></script> 
<script src="/assets/canvas-to-blob.min.js?body=1" type="text/javascript"></script> 
<script src="/assets/jquery.fileupload.js?body=1" type="text/javascript"></script> 
<script src="/assets/jquery.fileupload-fp.js?body=1" type="text/javascript"></script> 
<script src="/assets/jquery.fileupload-ui.js?body=1" type="text/javascript"></script> 
<meta content="authenticity_token" name="csrf-param" /> 
<meta content="Akp8GLPQ+DlFYI1g3CUA71hk0vg3G84aVwcVRHTlRUY=" name="csrf-token" /> 
</head> 
<body> 
<div class="files"> 
    <form action="/users" class="upload" id="fileupload" method="post"> 
    <input id="user_photo" name="user[photo]" type="file" /> 
    <div>Upload files</div> 
    </form> 

    <table class="upload_files"></table> 
</div> 
<!-- The template to display files available for upload --> 
<script id="template-upload" type="text/x-jquery-tmpl"> 
    <tr class="template-upload fade"> 
    <td class="preview"><span class="fade"></span></td> 
    <td class="name"><span>${name}</span></td> 
    </tr> 
</script> 
<script type="text/javascript" charset="utf-8"> 
    $(function() { 
     $('#fileupload').fileupload({ 
      add: function (e, data) { 
       console.log('add'); 
       $.each(data.files, function (index, file) { 
        console.log('Added file: ' + file.name); 
        //alert($('#tmpl-demo').tmpl(data)); 
        $('#template-upload').tmpl(data.files).appendTo('.upload_files'); 
       }); 
       var jqXHR = data.submit() 
         .success(function (result, textStatus, jqXHR) {/* ... */}) 
         .error(function (jqXHR, textStatus, errorThrown) {/* ... */}) 
         .complete(function (result, textStatus, jqXHR) { 
          console.log("complete"); 
          //$('.upload_files').append('<tr><td>'+ result +'</td></tr>'); 
         }); 
      }, 
      progress: function (e, data) { 
       console.log('progress'); 
      }, 
      start: function (e) { 
       console.log('start'); 
      }, 
      done: function (e) { 
       console.log('done'); 
      } 
     }).bind('fileuploadadd', function (e, data) { 
        console.log('fileuploadadd'); 
       }).bind('fileuploadprogress', function (e, data) { 
        console.log('fileuploadprogress'); 
       }).bind('fileuploadstart', function (e) { 
        console.log('fileuploadstart'); 
       }).bind('fileuploaddone', function (e) { 
        console.log('fileuploaddone'); 
       }); 


    }); 
</script> 
</body> 
</html> 

tôi so sánh html tạo ra sau khi chọn các tệp. Sự khác biệt duy nhất là ứng dụng demo có phần tử <canvas height="72" width="80"></canvas> trong phạm vi <td class="preview"><span class="fade"></span></td> bị thiếu trong ứng dụng của tôi.

Dường như một số vấn đề về cấu hình. Có ai vui lòng giúp tôi định cấu hình đúng cách để hiển thị hình thu nhỏ ngay khi người dùng chọn hình ảnh từ đĩa không?

Trả lời

3

Các bản xem trước đó không phải là một phần của phiên bản cơ bản. Chúng là một phần của "plugin bổ sung cung cấp giao diện người dùng hoàn chỉnh (jquery.fileupload-ui.js)."

Vì vậy, bạn phải bao gồm các tệp js đó và có thể bạn cần một số trình bao bọc HTML.

Kiểm tra HTML nguồn của bản trình diễn, vì nó được đưa vào bản trình diễn đó.

+0

Cảm ơn. Tôi đã sử dụng jquery.fileupload-ui.js và tinh chỉnh một chút để phù hợp với yêu cầu của tôi. Cảm ơn. Tôi sẽ chia sẻ các ứng dụng demo trên github một khi nó là trong hình dạng tốt. –

37

Nơi này bên add của bạn (e, dữ liệu) chức năng gọi lại, điều chỉnh cho các yếu tố html riêng bạn cho phù hợp:

$('body').append('<img src="' + URL.createObjectURL(data.files[0]) + '"/>'); 

Chức năng URL.createObjectURL được ghi chép lại here.

+4

Điều này làm việc mà không cần phải bao gồm bất kỳ tập tin phụ, nhờ – evilcelery

+3

Cảm ơn bạn rất nhiều, đây là những gì tôi đang tìm kiếm. Tôi vẫn không hiểu tại sao sửa đổi trình kích hoạt thêm sẽ xóa chức năng xem trước. –

+2

cảm ơn vì giải pháp tốt đẹp này. yêu cầu trình duyệt của tùy chọn này là gì? –

0

_renderPreviews Chỉnh sửa chức năng trong tập tin jquery.fileupload-ui.js

_renderPreviews: function (data) {   
     data.context.find('.preview').each(function (index, elm) {    
      $(elm).append(data.files[index].preview); 
      $(elm).append('<img width="90" src="' + URL.createObjectURL(data.files[0]) + '"/>'); 
     }); 
    }, 
Các vấn đề liên quan