Skip to content

Instantly share code, notes, and snippets.

@jz5
Created September 8, 2015 14:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jz5/0a23407ffa212c937204 to your computer and use it in GitHub Desktop.
Save jz5/0a23407ffa212c937204 to your computer and use it in GitHub Desktop.
(function ($) {
$("#target").on("drop", function (evt) {
// ファイルをドロップした場合
extractMedia(evt.originalEvent.dataTransfer.files);
return false;
}).on("dragenter", function () {
return false;
}).on("dragover", function () {
return false;
}).click(function () {
// 画面をクリックした場合、ファイル選択のダイアログを開く
$("#file").click();
return false;
});
// ダイアログからファイルを選択した場合
$("#file").on("change", function (evt) {
extractMedia(evt.target.files);
});
// zip ファイル(Office 文書)から、メディアフォルダーのみ残す
function extractMedia(files) {
for (var i = 0, f; f = files[i]; i++) {
var reader = new FileReader();
reader.onload = (function (theFile) {
return function (e) {
try {
var count = 0;
var zip = new JSZip(e.target.result);
// zip の内容を走査
$.each(zip.files, function (index, zipEntry) {
if (zipEntry.name.lastIndexOf('word/media/', 0) !== 0 &&
zipEntry.name.lastIndexOf('ppt/media/', 0) !== 0 &&
zipEntry.name.lastIndexOf('xl/media/', 0) !== 0) {
zip.remove(zipEntry.name);
} else {
count++;
}
});
if (count > 0) {
// メディアフォルダーがあった場合のみ、保存
var blob = zip.generate({ type: "blob" });
saveAs(blob, "media.zip");
} else {
alert("メディアファイルは見つかりませんでした。");
}
} catch (e) {
alert("Error reading " + theFile.name + " : " + e.message);
}
}
})(f);
reader.readAsArrayBuffer(f);
}
}
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment