2012-06-10 2 views
5

내 레일 애플리케이션에 Blueimp jQuery File Upload을 사용했습니다. 사용자가 파일을 선택하면 파일을 서버에 업로드하기 전에 이미지의 축소판 및 이미지 이름을 표시하려고합니다.Blueimp Jquery 파일 업로드 : 썸네일 미리보기 이미지가 표시되지 않습니다.

이 플러그인을 사용자 정의하려면 demo을 참조했습니다. 파일 이름을 화면에 인쇄 할 수 있지만 미리보기 이미지를 표시 할 수 없습니다. 여기

내가 파일을 선택한 후 생성 된 HTML을 비교 생성 된 HTML

<!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> 

입니다. 유일한 차이점은 요소가 내 애플리케이션에 누락 된 <td class="preview"><span class="fade"></span></td> 내에 있다는 것입니다.

구성 문제가있는 것 같습니다. 디스크에서 이미지를 선택하자마자 미리보기 이미지를 표시하도록 설정하는 데 도움을 주시겠습니까?

답변

3

미리보기는 기본 버전의 일부가 아닙니다. 그것들은 완전한 사용자 인터페이스 (jquery.fileupload-ui.js)를 제공하는 "추가 플러그인"의 일부입니다. "

따라서 js 파일을 포함해야하며 일부 HTML 래퍼가 필요할 수 있습니다.

데모에 포함되어 있기 때문에 데모의 소스 HTML을 확인하십시오.

+0

감사합니다. jquery.fileupload-ui.js를 사용하고 약간의 수정을 통해 요구 사항을 충족 시켰습니다. 감사. 좋은 모습을 보여 주면 github에서 데모 응용 프로그램을 공유 할 것입니다. –

37

찾는 따라서 자신 HTML 요소의 조절이 추가 기능의 내부 (즉, 데이터) 콜백 함수, 상기 URL.createObjectURL 기능을 설명하는 here

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

. 파일 jquery.fileupload-ui.js에서

+4

이것은 여분의 파일을 포함 할 필요없이 작동했습니다. 덕분에 – evilcelery

+3

고맙습니다.이게 내가 찾고 있던 것입니다. 추가 트리거를 수정하면 미리보기 기능이 왜 삭제되는지 이해할 수 없습니다. –

+2

좋은 솔루션을 주셔서 감사합니다. 이 옵션의 브라우저 요구 사항은 무엇입니까? –

0

편집 기능 _renderPreviews

_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]) + '"/>'); 
     }); 
    }, 
관련 문제