2017-07-09 4 views
0

zip.jsを使用して.zngファイルをロードしています。次に、それぞれのエントリに対して、ImageDataのソースをgetDataによって生成されたBlobに設定しています。zip.js getDataコールバックでファイル名を取得

zip.createReader(new zip.BlobReader(zipFile), function(reader) { 
    reader.getEntries(function(entries) { 
     for (var i = 0; i < entries.length; i++) { 
      var pid = entries[i].filename.replace('.png', ''); 
      var img = document.getElementById('MCImg_' + pid); 
      if (img) { 
       entries[i].getData(new zip.BlobWriter('text/plain'), function(data) { 
        // I need to know the filename associated with `data` here 
        // so I can know which `img` to set the src of 
       }) 
      } 
     } 
     //reader.close(); 
    }) 
}, function(error) { 
    console.log('error reading zip'); 
}); 

getDataコールバックは、任意の予測可能な順序で発生していないので、それは、特定のファイル名に結び付けられていない場合はどのように私は生産dataで何をすべきかを知ることができますか?私はこれがかなり一般的な使用事例であり、簡単な質問で答えるべきだと感じていますが、私は無駄に検索しました...

同様に、最後のgetData呼び出しが完了したかどうかわからない読者をいつ閉じるかを知っていますか?

答えて

0

この問題はgetDataコールを別の関数にラップすることで解決され、正しいコールバック内で正しいpidが使用できるようになりました。まだzip.jsの機能が不足しているようです

function loadImagesFromZip(bin) { 
    var zipFile = zips[bin]; 
    if (!(zipFile)) 
     return; 
    zip.createReader(new zip.BlobReader(zipFile), function(reader) { 
     reader.getEntries(function(entries) { 
      for (var i = 0; i < entries.length; i++) { 
       var pid = entries[i].filename.replace('.png', ''); 
       loadImage(pid, entries[i]); 
      } 
     }) 
    }, function(error) { 
     console.log('error reading zip'); 
    }); 
} 

function loadImage(pid, entry) { 
    var img = document.getElementById('MCImg_' + pid); 
    if (img && !img.src) { 
     entry.getData(new zip.BlobWriter('text/plain'), function(data) { 
      if (img) { 
       img.src = URL.createObjectURL(data); 
      } 
     }); 
    } 
} 
関連する問題