2013-03-12 9 views
1

JSZip library을 사용하여 .zip 파일을 순환하여 내용을 구문 분석 할 파일 (여기서는 test.txt)을 찾으려고 시도했습니다. .JSZip을 사용하여 .zip의 특정 파일을 열고 구문 분석하려고 시도합니다.

이 JSZip가 제공하는 sample [그에서 보는 것이 좋습니다 소스]의 수정을 수행하려고 시도 적이 :

<!DOCTYPE HTML> 

<html> 

<head> 

    <link href="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" rel="stylesheet"> 
    <link href="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" rel="stylesheet"> 

</head> 
<body> 
<div class = "container"> 
    <div class = "hero-unit"> 
     <input type="file" class="span7" id="input" name="file" multiple /> <!-- redo this in a bootstrappy way--> 
     <br> 
     <output id="output"></output> 
    </div> 
</div> 

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> 
<script src="/js/jszip-load.js"></script> 
<script src="/js/jszip.js"></script> 
<script src="/js/jszip-inflate.js"></script> 

<script> 

    if (window.File && window.FileReader && window.FileList && window.Blob) { 
     // Great success! All the File APIs are supported. 
    } else { 
     alert('The File APIs are not fully supported in this browser.'); 
    } 


    function handleFileSelect(evt) { 
     var files = evt.target.files; // FileList object 


     // files is a FileList of File objects. List some properties. 
     var output = []; 
     for (var i = 0, f; f = files[i]; i++) { 

      if (f.type !== "application/zip") { 
       document.getElementById('output').innerHTML = "<p class='text-error'>" + f.name + " isn't a zip file.</div>"; 
       continue; 
      } 

      var reader = new FileReader(); 

      reader.onload = (function(theFile) { 
       return function(e) { 

        var zip = new JSZip(e.target.result) 


        $.each(zip.files, function (index, zipEntry) { 
         if (zipEntry.name == "test.txt"){ 

          var text = zipEntry.asText(); 
          var lines = text.split(/[\r\n]+/g); // tolerate both Windows and Unix linebreaks 

          for(var i = 0; i < lines.length; i++) { 
           if (lines[i].length > 240){ 
            output.push('<li>' + lines[i] + '<br>'); 
           } 
          } 

          document.getElementById('output').innerHTML = '<h2>Paths with more than 240 characters:</h2> <br><ol>' + output.join('') + '</ol>'; 

         else{ 
           alert("file not found!") 
          } 

         } 

        }); 


       } 
      })(f); 


     } 
    } 

    document.getElementById('input').addEventListener('change', handleFileSelect, false); 


</script> 
</body> 
</html> 

어떤 이유를, 나는이를 사용하고있는 방법을 할 필요 확신 닫히면 실제로 문제의 .zip 파일을 구문 분석하지 않습니다. 내가 여기서 잘못하고있는 아이디어가 있습니까?

답변

1

이 코드를 사용하고 모든 파일 데이터를 가져올 수 있습니다. 콘텐츠 변수에 파일 내용이 있음 :

function loadSettingsFile(evt) { 
     var files = evt.target.files; 
     for (var i = 0, f; f = files[i]; i++) { 

       var reader = new FileReader(); 

       // Closure to capture the file information. 
       reader.onload = (function(theFile) { 
       return function(e) { 
        try { 
        var zip = new JSZip(e.target.result); 
        $.each(zip.files, function (index, zipEntry) { 
         var content = zipEntry.asText(); 
         alert(content); 
        }); 
        } catch(e) { 
        alert(e) 
        } 
       } 
       })(f); 

       // read the file ! 
       // readAsArrayBuffer and readAsBinaryString both produce valid content for JSZip. 
       reader.readAsArrayBuffer(f); 
       // reader.readAsBinaryString(f); 
      } 
    }