//ブックマークレットに使いたくて書いた、tarを生成するjavascriptの断片。 //最低限の機能しか無い代わりになるべく小さくしました。 //小さい代わりにいろいろ変更できないけど、 //複数ファイルを同時に保存させたい時にお手軽でいいと思う。 //使い方は、下の、sampleの所を見て。 //使いたければ好きに使ってください。
- function getfileblk_tar(n,b){
- var i=b.size%512,p="",s=0;
- for(i=i?(512-i):0;i>0;i--){p+="\0"}
- while(n.length<100){n+="\0"}
- n+="0000644\0"
- +"0000000\0"
- +"0000000\0"
- +("0000000000"+b.size.toString(8)+"\0").substr(-12)
- +"00000000000\0";
- for(i=0;i<n.length;i++){
- s+=n.charCodeAt(i);
- }
- n+=("000"+(s+1831&0xfffff).toString(8)+"\0 0").substr(-9);
- while(n.length<257){n+="\0"}
- n+="ustar \0root";
- while(n.length<297){n+="\0"}
- n+="root";
- while(n.length<512){n+="\0"}
- return new Blob([n,b,p]);
- }
- function finalize_tar(l){
- var n="";
- while(n.length<1024){n+="\0"}
- l.push(n);
- return new Blob(l,{type:"application/x-tar"});
- }
- //sample
- location = URL.createObjectURL(finalize_tar([
- getfileblk_tar("file1", new Blob(["Hello"])),
- getfileblk_tar("file2", new Blob(["world!"]))
- ]));
- //ブックマークレット用1行表記+危なげな文字をURLエンコード
- 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"});}