//ブックマークレットに使いたくて書いた、tarを生成するjavascriptの断片。 //最低限の機能しか無い代わりになるべく小さくしました。 //小さい代わりにいろいろ変更できないけど、 //複数ファイルを同時に保存させたい時にお手軽でいいと思う。 //使い方は、下の、sampleの所を見て。 //使いたければ好きに使ってください。

Format
JavaScript
Post date
2017-03-24 20:14
Publication Period
Unlimited
  1. function getfileblk_tar(n,b){
  2. var i=b.size%512,p="",s=0;
  3. for(i=i?(512-i):0;i>0;i--){p+="\0"}
  4. while(n.length<100){n+="\0"}
  5. n+="0000644\0"
  6. +"0000000\0"
  7. +"0000000\0"
  8. +("0000000000"+b.size.toString(8)+"\0").substr(-12)
  9. +"00000000000\0";
  10. for(i=0;i<n.length;i++){
  11. s+=n.charCodeAt(i);
  12. }
  13. n+=("000"+(s+1831&0xfffff).toString(8)+"\0 0").substr(-9);
  14. while(n.length<257){n+="\0"}
  15. n+="ustar \0root";
  16. while(n.length<297){n+="\0"}
  17. n+="root";
  18. while(n.length<512){n+="\0"}
  19. return new Blob([n,b,p]);
  20. }
  21. function finalize_tar(l){
  22. var n="";
  23. while(n.length<1024){n+="\0"}
  24. l.push(n);
  25. return new Blob(l,{type:"application/x-tar"});
  26. }
  27. //sample
  28. location = URL.createObjectURL(finalize_tar([
  29. getfileblk_tar("file1", new Blob(["Hello"])),
  30. getfileblk_tar("file2", new Blob(["world!"]))
  31. ]));
  32. //ブックマークレット用1行表記+危なげな文字をURLエンコード
  33. function%20getfileblk_tar(n,b){var%20i=b.size%25512,p="",s=0;for(i=i?(512-i):0;i>0;i--){p+="%5c0"}while(n.length<100){n+="%5c0"}n+="0000644%5c0"+"0000000%5c0"+"0000000%5c0"+("0000000000"+b.size.toString(8)+"%5c0").substr(-12)+"00000000000%5c0";for(i=0;i<n.length;i++){s+=n.charCodeAt(i);}n+=("000"+(s+1831&0xfffff).toString(8)+"%5c0%200").substr(-9);while(n.length<257){n+="%5c0"}n+="ustar%20%20%5c0root";while(n.length<297){n+="%5c0"}n+="root";while(n.length<512){n+="%5c0"}return%20new%20Blob([n,b,p]);}function%20finalize_tar(l){var%20n="";while(n.length<1024){n+="%5c0"}l.push(n);return%20new%20Blob(l,{type:"application/x-tar"});}
Download Printable view

URL of this paste

Embed with JavaScript

Embed with iframe

Raw text