2016-04-29 13 views
1

私は2つのハンドラを書きましたが、今はハンドブックを使用してハンドラを1つだけ書く必要があります。私を助けてください。これは、スイッチで、私がアップロードパス場合の唯一の違いだと思いスイッチケースを使用して2つのハンドラを書き込む方法

public void ProcessRequest(HttpContext context) 
{ 
    string fname = string.Empty; 
    string ffname = string.Empty; 
    string m_Result = string.Empty; 
    DataTable dt = new DataTable(); 
    Guid id = Guid.NewGuid(); 

    if (context.Request.Files.Count > 0) 
    { 
     HttpFileCollection files = context.Request.Files; 
     for (int i = 0; i < files.Count; i++) 
     { 
      HttpPostedFile file = files[i]; 
      if (HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE" || HttpContext.Current.Request.Browser.Browser.ToUpper() == "INTERNETEXPLORER") 
      { 
       string[] testfiles = file.FileName.Split(new char[] { '\\' }); 
       fname = testfiles[testfiles.Length - 1]; 
      } 
      else 
      { 
       fname = file.FileName; 
       ffname = "~/Adds_uploads/" + fname; 

      } 
      string p = Path.GetFileNameWithoutExtension(fname); 
      fname = Path.Combine(context.Server.MapPath("~/Adds_uploads/"), p); 
      file.SaveAs(fname + id + Path.GetExtension(ffname)); 
      string dirName1 = new DirectoryInfo(fname).Name; 

      FileInfo fInfo = new FileInfo(ffname); 
      String dirName = fInfo.Directory.Name + '/' + dirName1 + id + Path.GetExtension(ffname); 

      HttpContext.Current.Response.Write(JsonConvert.SerializeObject(dirName)); 
      //RAID = context.Request.QueryString["RA_ID"].ToString(); 
      //UploadFileToDB(file, RAID); 
     } 
    } 
} 

public bool IsReusable { 
    get { 
     return false; 
    } 
} 

第二ハンドラ

public void ProcessRequest(HttpContext context) 
{ 
    string fname = string.Empty; 
    string ffname = string.Empty; 
    string m_Result = string.Empty; 
    DataTable dt = new DataTable(); 
    Guid id = Guid.NewGuid(); 

    if (context.Request.Files.Count > 0) 
    { 
     HttpFileCollection files = context.Request.Files; 
     for (int i = 0; i < files.Count; i++) 
     { 
      HttpPostedFile file = files[i]; 
      if (HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE" || HttpContext.Current.Request.Browser.Browser.ToUpper() == "INTERNETEXPLORER") 
      { 
       string[] testfiles = file.FileName.Split(new char[] { '\\' }); 
       fname = testfiles[testfiles.Length - 1]; 
      } 
      else 
      { 
       fname = file.FileName; 
       ffname = "~/Fileuploads/" + fname; 

      } 
      string p = Path.GetFileNameWithoutExtension(fname); 
      fname = Path.Combine(context.Server.MapPath("~/Fileuploads/"), p); 
      file.SaveAs(fname + id + Path.GetExtension(ffname)); 
      string dirName1 = new DirectoryInfo(fname).Name; 

      FileInfo fInfo = new FileInfo(ffname); 
      String dirName = fInfo.Directory.Name + '/' + dirName1 + id + Path.GetExtension(ffname); 

      HttpContext.Current.Response.Write(JsonConvert.SerializeObject(dirName)); 
      //RAID = context.Request.QueryString["RA_ID"].ToString(); 
      //UploadFileToDB(file, RAID); 
     } 
    } 
} 

public bool IsReusable { 
    get { 
     return false; 
    } 
} 

答えて

0

この問題を解決case.pleaseことを私はしたい私の2つのハンドラのコードです。私はビューを別の入力フォームに沿って渡し、それに基づいてアップロードパスを決定することをお勧めします。

すなわち あなたは、個々のファイルアップロードフォーム内の

//for case one 
<input type='hidden' name='uploadType' value='files' /> 
//for case two 
<input type='hidden' name='uploadType' value='adds' /> 

を持つことになり、その後、あなたのアクションメソッド上であなただけの

var mappedDirectory = HttpContext.Current.Request.Form["uploadType"].ToString() == "adds" ? "~/Adds_uploads/" : "~/Fileuploads/"; 

を使用することができますし、あなたのfnameの構築物中にこの文字列を使用します。あなたの新しいメソッドは次のようになります

public void ProcessRequest(HttpContext context) 
{ 
    var mappedDirectory = HttpContext.Current.Request.Form["uploadType"].ToString() == "adds" ? "~/Adds_uploads/" : "~/Fileuploads/"; 
    string fname = string.Empty; 
    string ffname = string.Empty; 
    string m_Result = string.Empty; 
    DataTable dt = new DataTable(); 
    Guid id = Guid.NewGuid(); 

    if (context.Request.Files.Count > 0) 
    { 
     HttpFileCollection files = context.Request.Files; 
     for (int i = 0; i < files.Count; i++) 
     { 
      HttpPostedFile file = files[i]; 
      if (HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE" || HttpContext.Current.Request.Browser.Browser.ToUpper() == "INTERNETEXPLORER") 
      { 
       string[] testfiles = file.FileName.Split(new char[] { '\\' }); 
       fname = testfiles[testfiles.Length - 1]; 
      } 
      else 
      { 
       fname = file.FileName; 
       ffname = mappedDirectory + fname; 

      } 
      string p = Path.GetFileNameWithoutExtension(fname); 
      fname = Path.Combine(context.Server.MapPath(mappedDirectory), p); 
      file.SaveAs(fname + id + Path.GetExtension(ffname)); 
      string dirName1 = new DirectoryInfo(fname).Name; 

      FileInfo fInfo = new FileInfo(ffname); 
      String dirName = fInfo.Directory.Name + '/' + dirName1 + id + Path.GetExtension(ffname); 

      HttpContext.Current.Response.Write(JsonConvert.SerializeObject(dirName)); 
      //RAID = context.Request.QueryString["RA_ID"].ToString(); 
      //UploadFileToDB(file, RAID); 
     } 
    } 
} 
+0

ここで、私のハンドラにそのコードを置きます。明確に教えてください。私はこれに新しいです – chaitanya

+0

あなたは私の上記のコードを変更してくださいしてください。 – chaitanya

+0

あなたの唯一の変更はffname = "〜/ Fileuploads /" + fnameにあると思います。とfname = Path.Combine(context.Server.MapPath( "〜/ Fileuploads /")、p);ですから、文字列をハードコードする代わりにmappedDirectory変数を使用してみてください。そうすれば、1つの方法で終わるので、あなたは考えを正しく得ることができます。 – SadiRubaiyet

関連する問題