2013-08-01 91 views
-2

我试图上传多个文件与过滤的扩展名。即使我提供了正确的文件,我也无法上传文件。请帮我解决这个问题。文件上传扩展

HttpFileCollection hfc = Request.Files;

 for (int i = 0; i <= hfc.Count - 1; i++) 
    { 
     HttpPostedFile hpf = hfc[i]; 
     string sFileExt1 = Path.GetExtension(hfc[i].FileName); 
     if (hpf.ContentLength > 0) 
     { 
      if (sFileExt1 != ".jpg" || sFileExt1 != ".jpeg") 
      { 
       //lblMsg.Text = "Extension not supported"; 
       lblMsg.Text = sFileExt1.ToString(); 
       break; 
      } 
      else 
      { 
       hpf.SaveAs(Server.MapPath("Special_Requests\\") + Path.GetFileName(hpf.FileName)); 
       iUploadedCnt += 1; 
       lblMsg.Text = "File(s) upload successsfuly."; 
      } 
     } 
    } 

ayha

+2

你怎么不能够上传文件?它以什么方式失败?当你调试这个时,它会出错哪里? – David

+0

没有错误消息,但在文件夹中的可用文件中上载了文件。 – ayha

+1

我知道文件不会在目标文件夹中结束,但是当您调试时,它会在哪里失败?这些文件是否包含在POST表单中?你成功获得了'FileExt1'值吗?这个价值包含什么?这个代码的观察行为在什么时候偏离了预期的行为?我们无法为您调试,您必须向我们提供相关的运行时信息。 – David

回答

3

Your extension cannot be both a .jpg and a .jpeg simultaneously. Basically, you're saying to fail if the extension isn't a .jpg or if the extension isn't a .jpeg. So File.jpeg will cause a true condition (extension != jpg), and so will File.jpg (extension != jpeg)

Try If(sFileExt1 != ".jpg" && sFileExt1 != ".jpeg")

更好的解决方案

正如评论指出的那样,我认为一个更好的解决办法是这样的下面(未测试):

List<string> validExtensions = new List<string> {".jpg", ".jpeg", ".png" }; 
if (validExtensions.Contains(sFileExt1.ToLower())) 
{ 
    hpf.SaveAs(Server.MapPath("Special_Requests\\") + Path.GetFileName(hpf.FileName)); 
    iUploadedCnt += 1; 
    lblMsg.Text = "File(s) upload successfully.";   
} 
else 
{ 
    //lblMsg.Text = "Extension not supported"; 
    lblMsg.Text = sFileExt1; 
    break; 
} 
+0

您的解决方案有效,但是当我添加另一个扩展时,它会失败,如下所示。如果(sFileExt1!=“.jpg”&& sFileExt1!=“.jpeg”|| sFileExt1!=“.png”) – ayha

+0

当然是的。当文件扩展名不是“.jpg”,不是“.jpeg”,或者不是“.png”时,您的错误代码将会执行。你需要在所有情况下使用&&。用if(sFileExt1 ==“.jpg”|| sFileExt1 ==“.jpeg”|| sFileExt1 ==“.png”){...运行有效的扩展代码...}来替换你的逻辑可能会更容易{...显示无效的扩展信息...}更好的办法是将你的扩展名列表放入一个数组中,看看扩展名是否在列表中,并相应地执行。 –