HTML5 ã® Drag and Drop API ã使ããã¨ã§ããã©ã¦ã¶ã«ããããããããã¡ã¤ã«ã®æ å ±ãæ±ããã¨ãåºæ¥ã¾ãããã㦠File API ãçµã¿åããããã¨ã§ããã¡ã¤ã«ã®ä¸èº«ã¾ã§æ±ããã¨ãåºæ¥ãããã«ãªãã¾ãã
ãã㦠FormData ãªãã¸ã§ã¯ã㨠XHR ãçµã¿åããããã¨ã§ã¢ãããã¼ãå¦çã¾ã§ãå®è£ ãããã¨ãåºæ¥ã¾ãã宿å³ã¯ãããªæãã§ãã
ä»å㯠JavaScript ã®å¦çãä¸å¿ã§ããjQuery ã使ã£ã¦ããã®ã§è¿½å ãã¦ãã ãããã
$(function () { var uploadFiles = function (files) { // FormData ãªãã¸ã§ã¯ããç¨æ var fd = new FormData(); // ãã¡ã¤ã«æ å ±ã追å ãã for (var i = 0; i < files.length; i++) { fd.append("files", files[i]); } // XHR ã§éä¿¡ $.ajax({ url: "@Url.Action("upload", "file")", type: "POST", data: fd, processData: false, contentType: false }); }; // ãã¡ã¤ã«é¸æãã©ã¼ã ããã®å ¥å $("#form").bind("change", function () { // 鏿ããããã¡ã¤ã«æ å ±ãåå¾ var files = this.files; // ã¢ãããã¼ãå¦ç uploadFiles(files); }); // ãã©ãã°ããããããã®å ¥å $("#target").bind("drop", function (e) { // ãã©ãã°ããããã¡ã¤ã«æ å ±ãåå¾ var files = e.originalEvent.dataTransfer.files; // ã¢ãããã¼ãå¦ç uploadFiles(files); }) .bind("dragenter", function () { // false ãè¿ãã¦ããã©ã«ãã®å¦çãå®è¡ããªãããã«ãã return false; }) .bind("dragover", function () { // false ãè¿ãã¦ããã©ã«ãã®å¦çãå®è¡ããªãããã«ãã return false; }); });
Firefox 4 ãªã©ã§ã¯ FormData ãªãã¸ã§ã¯ããç¨æããã¦ããã®ã§ãé常ã«é¢å㪠multipart/form-data ã®å¦çãè¡ãå¿ è¦ãããã¾ãããIE10 PP2 ã§ã対å¿ããã¨éçºè ã¬ã¤ãã«æ¸ãã¦ãã£ãã®ã§ãããç¾æç¹ã®ãã¼ã¸ã§ã³ã§ã¯é対å¿ã®ãããªã®ã§ä½¿ãã¾ããã§ãããä»å¾ã«æå¾ ãã¾ãã
ããã§ã¯ HTML å´ãè¦ã¦ã¿ã¾ãããããã£ã¡ã¯å¤§ãããã¨ãªãã§ãã
<h2>Form Version</h2> <input id="form" type="file" multiple="multiple" /> <br /> <h2>Drag and Drop Version</h2> <div id="target" draggable="true"> <br /> <br /> <span>Drop File(s)</span> <br /> <br /> <br /> </div>
éã㯠type="file" ã® input ã¿ã°ã« multiple="multiple" ã追å ãã¦ããã ãã§ããIE10 PP2 ãã使ããããã«ãªã£ããè¤æ°ã®ãã¡ã¤ã«ã鏿å¯è½ã«ããããã®å±æ§ã§ãã
ããã¦ãã©ãã°ããããã®ã¿ã¼ã²ããã«ãªã£ã¦ãã div ã¿ã°ã«ã¯ draggable="true" ã追å ãã¦ãã¾ãããã®è¨å®ãããªãã¨ããããã¿ã¼ã²ããã«ãªãã¾ããã
æå¾ã«ã³ã³ããã¼ã©ã¨ã¢ã¯ã·ã§ã³ã§ããã弿°ã«è¿½å ããã ãã§ãããã¯ã説æããããªãã§ãããã
public class FileController : Controller { public ActionResult Upload() { return View(); } [HttpPost] public ActionResult Upload(HttpPostedFileBase[] files) { // ä½ãããï¼ï¼ return View(); } }
ä»åã¯ãµã³ãã«ãªã®ã§ Upload ã¢ã¯ã·ã§ã³ã§ JSON ã¨ãè¿ãã¦ãªããã§ããã©ãæ¬æ¥ãªãä½ããã®å¦ççµæãè¿ã㦠JavaScript å´ã§ä½ã¨ããã¦ãã ãããã
ããã«ãã¦ã HTML5 ã¯ããããåºæ¥ã¦æ¥½ããã§ãããããããã° File API ã¨æ¸ãã¦ãããªãã File Reader ã¨ã使ã£ã¦ãªãã£ãã§ãããã¾ããããã