2011-09-04 6 views
0

오늘 드래그 앤 드롭과 파일 API를 사용하는 썸네일을 작성하려고 시도해 왔습니다.HTML5 File API는 항상 [object file]의 DataURI를 반환합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

마치 내가 합리적으로 멀리있는 것처럼 느껴집니다. 그러나 내 이미지 파일의 원본으로 제공되는 DataURI는 항상 [개체 파일]로 반환되므로 이미지가 표시되지 않습니다.

어떤 도움이 필요합니까?!

감사합니다. 대니

 <!DOCTYPE html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
<style> 
    #thumbnailPreview 
    { 
     width:149px; 
     height:137px; 
     border:3px dashed #333; 
     border-radius:10px; 
     text-align:center; 
    } 
</style> 
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
<script> 
    $("document").ready(function() { 
     if (!!FileReader) 
     { 
      $("#thumbnailPreview").append("<p>Drag image here to set as thumbnail</p>") 
      $("#thumbnailUploadBox").hide(); 

      var thumbnailPreview = document.getElementById("thumbnailPreview") 
      // init event handlers 
      thumbnailPreview.addEventListener("dragenter", preventDefault, false); 
      thumbnailPreview.addEventListener("dragexit", preventDefault, false); 
      thumbnailPreview.addEventListener("dragover", preventDefault, false); 
      thumbnailPreview.addEventListener("drop", drop, false) 

      function preventDefault(evt) 
      { 
       evt.stopPropagation(); 
       evt.preventDefault(); 
      } 

      function drop(evt) 
      { 
       evt.stopPropagation(); 
       evt.preventDefault(); 
       var files = evt.dataTransfer.files; 
       var noOfFiles = files.length; 
       if (noOfFiles === 1) 
       { 
        handleImages(files);  
       } 
       else 
       { 
        alert("You appear to be attempting to upload more or less than 1 image. You can only have one thumbnail image. Please try again."); 
       } 
      } 

      function handleImages(files) 
      { 
       var file = files[0]; 
       { 
        if(file.type.indexOf("image") == 0) 
        { 
         $("#thumbnailPreview").empty().append('<p>Working on it!</p><progress id="progressbar"></progress>'); 
         var reader = new FileReader(); 
         reader.onloadend = handleReaderLoadEnd; 
         reader.onprogress = handleReaderProgress; 
         reader.readAsDataURL(file); 
        } 
        else 
        { 
         alert("The file you dragged wasn't an image. Please drag another file before attempting to upload");  
        } 
       } 
      } 
      function handleReaderLoadEnd(e) { 
       $("#thumbnailPreview").empty().prepend('<img id="thumbnailPreviewImage">'); 
       $("#thumbnailPreviewImage").attr({src: e.target.result}); 
      } 
      function handleReaderProgress(evt) 
      { 
       if (evt.lengthComputable) 
       { 
        var loaded = (evt.loaded/evt.total); 
        $("#progressbar").attr({ value: loaded * 100 }); 
       } 
      } 
     } 
    }); 
</script> 
</head> 

<body> 
<form action="lighthouseMaker.php" enctype="application/x-www-form-urlencoded" method="post"> 
    <div id="thumbnailPreview"> 
     <p>Upload an Image 149 x 137px</p> 
    </div> 
    <div id="thumbnailUploadBox"> 
     <input type="file" name="thumbnail"> 
    </div> 
</form> 
</body> 
</html> 
+0

[첫 세계 문제 (http://www.reddit.com/r/firstworldproblems/) : 나는'에 StackOverflow에 대한 질문에 대답하는 추한 긴 XHTML의적인 doctypes로 부담해야한다 :)'할 수만 있다면''please ... –

+0

나는 보통 이렇게한다. 이것은 바보 같이 DW에서 시작하여 머리를 바꾸지 않은 5 분짜리 프로젝트 중 하나 일 뿐이다. 조금 더 편해졌습니다.) – DanTonyBrown

답변

0

당신은 handleReaderLoadEnd()의 반환 값을 FileReader의 onloadend 핸들러를 설정하기보다는 콜백을 설정하고는 ecent을 전달하는 (아래에있는 내 코드입니다). 대신, 당신이 원하는 :

reader.onloadend = handleReaderLoadEnd; 

.... 

function handleReaderLoadEnd(e) { 
    $("#thumbnailPreview").empty().prepend('<img id="thumbnailPreviewImage">'); 
    $("#thumbnailPreviewImage").attr({src: e.target.result}); 
} 
+0

나를 위해 일하지 않는 것 같습니다. :(원래 코드에서 코드를 편집했습니다. – DanTonyBrown

관련 문제