2009-06-09 95 views

回答

4

你也可以做一个JavaScript替代过滤它是服务器端(你可能也想这样做),但是这样可以节省客户端花费等待上传完成的时间,以便发现它是错误的类型。

http://javascript.internet.com/forms/upload-filter.html

所以基本上你只要运行一个JavaScript函数上提交解析关闭上传文件的扩展名,如果它不正确类型的给他们一个警告。你也可以使用document.forms [0] .submit();}。而不是通过形式参考(因为ASP.NET真的只使用一种形式(除非你做一些时髦))

1

检查上传的文件服务器端的文件名:

FileUpload1.PostedFile.FileName 

除非你想使用Java或在客户端上类似的东西,有真的没有什么可以做的过滤上传的文件之前,他们会发送到服务器。

2
 string fileName = fuFiles.FileName; 

     if(fileName.Contains(".dot")) 
     { 
      fuFiles.SaveAs(Server.MapPath("~/Files/" + fileName)); 
     } 
2

如果您的意思是使用标准浏览器的文件选择器过滤文件扩展名客户端/端,是不可能的。 要做到这一点,你必须使用混合类型的上传,如SWFUpload,基于Flash上​​传系统(这是一个非常好的技术:它允许你发布超过一个文件)。

你可以在标准模式下唯一要做的是过滤已经发布文件,我建议使用System.IO.Path命名空间实用程序:

if (Path.GetExtension(upFile.FileName).ToUpper().CompareTo(".DOT") == 0) 
{ 
    /* do what you want with file here */ 
} 
1

在这里我有一个小的方法,我用来过滤哪些类型的文件可以上传名为fuLogo的文件上传控件。

if (fuLogo.HasFile) 
     { 
      int counter = 0; 
      string[] fileBreak = fuLogo.FileName.Split(new char[] { '.' }); 
      logo = Server.MapPath("../Images/Logos/" + fileBreak[0] + counter.ToString()+ "." + fileBreak[1]); 
      if (fileBreak[1].ToUpper() == "GIF" || fileBreak[1].ToUpper() == "PNG") 
      { 
       while (System.IO.File.Exists(logo)) 
       { 
        counter++; 
        logo = Server.MapPath("../Images/Logos/" + fileBreak[0] + counter.ToString() + "." + fileBreak[1]); 
       } 
      } 
      else 
      { 
       cvValidation.ErrorMessage = "This site does not support any other image format than .Png or .Gif . Please save your image in one of these file formats then try again."; 
       cvValidation.IsValid = false; 
      } 
      fuLogo.SaveAs(logo); 
     } 

基本上,我首先遍历目录来查看文件是否已经存在。如果文件存在,(例如picture0.gif),它会增加计数器(至picture1.gif)。它可以防止不同的用户在他们的图片具有相同的名字时会覆盖彼此的图片。

+1

如果您的文件名是myFile.1.png,则会失败,请改用Path.GetExtension(theFileName) – 2012-03-16 15:13:48