2013-09-22 5 views
2

파일 업로드 컨트롤이 동적으로 생성되는 프로젝트가 있습니다. Json을 사용하여 파일을 비동기 적으로 디렉토리에 저장하려고합니다. asp.net 4.0에서 핸들러 템플릿을 사용하여 파일 이름으로 파일을 저장하려고합니다.동적으로 생성 된 파일 업로드 컨트롤에서 파일을 저장할 수 없습니다.

 $.ajax({ 
     type: "POST", 
     contentType: "application/json; charset=utf-8", 
     url: Sitepath + "Handler/FileUploader.ashx?filename="+strfiles, 
     secureuri: false, 
     fileElementClass: "multi", 
     dataType: "json", 
     async: false 
    }); 

오류가 발생하여 FileUploader 클래스 외부에 HTTPPostedFile의 논리를 추가했습니다.

public class FileUploader : IHttpHandler, IRequiresSessionState 

는 {

public void ProcessRequest(HttpContext context) 
{ 
    string rt = ""; 


    HttpContext.Current.Response.ContentType = "text/HTML"; 
    string urlresponse = HttpContext.Current.Request.Url.ToString(); 
    string tempfiles = ""; 
    string filenames = ""; 
    int convert = urlresponse.IndexOf(","); 
    urlresponse = urlresponse.Substring(convert + 1); 
    string[] filesArray = urlresponse.Split(','); 
    for (int i = 0; i < filesArray.Length; i++) 
    { 
     tempfiles = filesArray[i].ToString(); 
     int lstIndex=tempfiles.LastIndexOf("\\"); 
     filenames = filenames + "," + tempfiles.Substring(lstIndex + 1); 
    } 
    filenames = filenames.Substring(filenames.IndexOf(',') + 1); 





    HttpFileCollection uploads = HttpContext.Current.Request.Files; 
    string b = HttpContext.Current.Request.Url.ToString(); 

    Hashtable hashtable = new Hashtable(); 

    // Declare variable 
    string OrderFileName = String.Empty; 
    string OrderIDs =String.Empty; 
    string TempFolder = String.Empty; 

    if (HttpContext.Current.Session["OrderID"] != null) 
    { 

     OrderIDs = HttpContext.Current.Session["OrderID"].ToString(); 

     string mapPath = HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["DocPath"].ToString()); 

     string mapPathUserId = mapPath + "\\" + HttpContext.Current.Session["UserID"]; 
     /// 
     var g = filenames.Split(','); 

     for (int t = 0; t < g.Length;t++) 
     { 

      var h = g[t]; 
      rt = filesArray[t].ToString(); 

      if (Directory.Exists(mapPathUserId) == false) 
      { 
       Directory.CreateDirectory(mapPathUserId); 
      } 
      string mapPathCount = mapPathUserId + "/" + OrderIDs; 
      if (Directory.Exists(mapPathCount) == false) 
      { 
       //--------------Begin(Create Directory)----------------------------------------------------------------------------------// 

       Directory.CreateDirectory(mapPathCount); 

       //--------------End(Create Directory)----------------------------------------------------------------------------------// 

      } 
      TempFolder = mapPathUserId + "/" + "Temp"; 

      if (Directory.Exists(TempFolder) == false) 
      { 
       //--------------Begin(Create Directory for temp folder)----------------------------------------------------------------------------------// 

       Directory.CreateDirectory(TempFolder); 

       //--------------End(Create Directoryfor temp folder)----------------------------------------------------------------------------------// 

      } 

      OrderFileName = h; 
      hashtable.Add(t.ToString(), OrderFileName); 

      var see = HttpContext.Current.Server.MapPath(TempFolder + "/" + OrderFileName); 
     } 

지금, 경로가 성공적으로 생성되고 있지만, 파일은 지정된 디렉토리에 저장하기되지 않습니다. 파일을 저장하는 코드 :

for (int i = 0; i < uploads.Count; i++) 
     { 
      HttpPostedFile upload = uploads[i]; 

      if (Directory.Exists(mapPathUserId) == false) 
      { 
       Directory.CreateDirectory(mapPathUserId); 
      } 

      string mapPathCount = mapPathUserId + "/" + OrderIDs; 


      if (Directory.Exists(mapPathCount) == false) 
      { 
       //--------------Begin(Create Directory)----------------------------------------------------------------------------------// 

       Directory.CreateDirectory(mapPathCount); 

       //--------------End(Create Directory)----------------------------------------------------------------------------------// 

      } 

      /// Create Path for Temp Folder 


      TempFolder = mapPathUserId + "/" + "Temp"; 

      if (Directory.Exists(TempFolder) == false) 
      { 
       //--------------Begin(Create Directory for temp folder)----------------------------------------------------------------------------------// 

       Directory.CreateDirectory(TempFolder); 

       //--------------End(Create Directoryfor temp folder)----------------------------------------------------------------------------------// 

      } 

      if (upload.ContentLength > 0) 
      { 

       if (upload.FileName.Contains(" ")) 
       { 
        OrderFileName = upload.FileName.Replace(" ", "_"); 
       } 

       else 
       { 
        OrderFileName = upload.FileName; 

       } 

       hashtable.Add(i.ToString(), OrderFileName); 
       upload.SaveAs(TempFolder + "/" + OrderFileName); 
      } 

     } 

도와주세요.

답변

0

올바른 경로를 서버에 전달해야합니다. 함수를 사용하여 경로를 매핑 해 봅니다.

upload.SaveAs(Server.MapPath(TempFolder + "/" + OrderFileName)); 
+0

안녕하세요, 이것은 HttpContext의 처리기입니다. 맞습니까? 변수 h에 파일 모음을 추가하려고합니다. 그래서 HttpPostedFile 클래스를 사용하지 않고이 파일들을 저장하고 싶습니다. 다음은 경로를 설정하는 코드입니다. var see = HttpContext.Current.Server.MapPath (TempFolder + "/"+ OrderFileName); 다음과 같이 저장하면 좋겠지 만 (SaveAs 메서드는 var h에 대해 존재하지 않습니다) : h.SaveAs (Server.MapPath (TempFolder + "/"+ "OrderFileName))); – Nix

+0

어디서나 var h가 보이지 않습니까? –

+0

내 질문에 코드의 세 번째 블록에있어. – Nix

관련 문제