ASP.NET MVC一括ファイルアップロード

9010 ワード

プロジェクトの必要に応じて、ASP.NETMVCで一括ファイルアップロードを実現.まず、単一ファイルのアップロードを紹介します.次に、マルチファイルアップロードの実装方法について説明します.

一、単一ファイルアップロード


単一ファイルアップロードの原理は、ファイルデータをrequestに格納し、ページからバックグラウンドcontrollerに直接転送し、viewとcontrollerの間でパラメータを転送し、コードに直接コメントを貼ることです.Upload.aspxファイルのコード:
"multipart/form-data" method="post"> type="file" id="file" /> type="submit" value=" " />

Controllerのコード:
[HttpPost]
public ActionResult Upload(FormCollection form)
{
    if (Request.Files.Count == 0){
                //Request.Files.Count     0     
                return View();
            }
    var file = Request.Files[0];
    if (file.ContentLength == 0){
        //     (      ) 0 ,     
        return View();
    }
    else{
        //      0
        file = Request.Files[0]; //     UpLoadFile          
        string target = Server.MapPath("/")+("/Mock/Learning/");//          
        string filename = file.FileName;//      
        string path = target + filename;//         
        file.SaveAs(path);}
        return View();
}

ここで注意しなければならないのは、ASP.NETではrequestのデフォルトサイズは4 Mなので、大きなファイルをアップロードするにはWebを変更する必要があります.config.
<system.web>
  <httpRuntime maxRequestLength="40960"/> 
system.web>

二、一括ファイルアップロード


jsによってユーザーのニーズに応じてアップロードコントロールを動的に追加し、複数のファイルをrequestによってcontrollerに一括してアップロードすることを考えています.Upload.aspxファイルのコード:
<form enctype="multipart/form-data" method="post">
    <div id="FileList">
        <div>
            <input type="file" id="file" name="file0"/>
        div>
    div>
    <p>
        <a onclick="AddFile();">    a>
    p>
    <p>
        <input type="submit" value="  " />
    p>
form>

<script>
var index = 1;        
function AddFile() {            
    var ul = document.getElementById("FileList");
    var inputDiv = document.createElement("div");
    inputDiv.setAttribute("Id", "div" + index);
    var file = document.createElement("input");
    file.setAttribute("type", "file");
    file.setAttribute("id", "file" + index);
    file.setAttribute("name", "file" + index);
    var btnDel = document.createElement("input");
    btnDel.setAttribute("type", "button");
    btnDel.setAttribute("value", "  ");
    btnDel.setAttribute("Id", index);
    btnDel.onclick = function() {
        inputDiv.removeChild(file);
        inputDiv.removeChild(btnDel);
        ul.removeChild(inputDiv);
    }            
    inputDiv.appendChild(file);
    inputDiv.appendChild(btnDel);
    ul.appendChild(inputDiv);
    index++;
}
script>

Controllerのコード:
[HttpPost]        
public ActionResult Upload(FormCollection form)        
{            
    foreach (string item in Request.Files)
    {                
        HttpPostedFileBase file = Request.Files[item] as HttpPostedFileBase;                
        if (file==null || file.ContentLength == 0)
            continue;    
        //  Upload       ,      
        string path = Server.MapPath("..//Upload"); 
        if (!System.IO.Directory.Exists(path)) 
        {                   
            System.IO.Directory.CreateDirectory(path); 
        }             
        path = AppDomain.CurrentDomain.BaseDirectory + "Upload/";             
        //           
        string fileName = file.FileName; 
        //        
        file.SaveAs(Path.Combine(path,fileName));  
    }           
    return Content("alert('      ');window.history.back();");      
}

注意Request.Filesでは、異なるファイルのindexはアップロードコントロールのname属性値であるため、aspxページコードでは複数のアップロードコントロールのname属性値が互いに異なることを保証する必要があります.以上で一括ファイルアップロードを実現しました.私はやっと浅学で、ただみんなの参考に供して、もし不当なところがあれば、みんなに批判して指摘してください!