如果用FileUpload上传文件可以用以下代码检测。
但是用input type=file 上传文件呢,怎么转换用IsAllowedExtension()函数检测?
<input  size=10  type=File name="+i+">
 用if (IsAllowedExtension(Request.Files[i]) == true)好像不行。提示  無法從 'System.Web.HttpPostedFile' 轉換為 'System.Web.UI.WebControls.FileUpload' 要怎样转换呢?            using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page 
{
     protected void Page_Load(object sender, EventArgs e)
     {     }
     protected void btn_upload_Click(object sender, EventArgs e)
     {
         try
         {
             //判断是否已经选取文件
             if (FileUpload1.HasFile)
             {
                 if (IsAllowedExtension(FileUpload1))
                 {
                     string path = Server.MapPath("~/images/");
                     FileUpload1.PostedFile.SaveAs(path + FileUpload1.FileName);
                     Response.Write("<script>alert('上传成功');</script>");
                 }
                 else
                 {
                     Response.Write("<script>alert('您只能上传jpg或者gif图片');</script>");
                 }             }
             else
             {
                 Response.Write("<script>alert('你还没有选择文件');</script>");
             }
         }
         catch (Exception error)
         {
             Response.Write(error.ToString());
         }
     }
     //真正判断文件类型的关键函数
     public static bool IsAllowedExtension(FileUpload hifile)
     {
         System.IO.FileStream fs = new System.IO.FileStream(hifile.PostedFile.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
         System.IO.BinaryReader r = new System.IO.BinaryReader(fs);
         string fileclass = "";
         byte buffer;
         try
         {
             buffer = r.ReadByte();
             fileclass = buffer.ToString();
             buffer = r.ReadByte();
             fileclass += buffer.ToString();         }
         catch
         {         }
         r.Close();
         fs.Close();
         if (fileclass == "255216" || fileclass == "7173")//说明255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar
         {
             return true;
         }
         else
         {
             return false;
         }     }
}

解决方案 »

  1.   

    方法改下就可以呀     public static bool IsAllowedExtension(HttpPostedFile postFile)
         {
             System.IO.FileStream fs = new System.IO.FileStream(postFile.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
             System.IO.BinaryReader r = new System.IO.BinaryReader(fs);
             string fileclass = "";
             byte buffer;
             try
             {
                 buffer = r.ReadByte();
                 fileclass = buffer.ToString();
                 buffer = r.ReadByte();
                 fileclass += buffer.ToString();         }
             catch
             {         }
             r.Close();
             fs.Close();
             if (fileclass == "255216" || fileclass == "7173")//说明255216是jpg;7173是gif;6677是BMP,13780是PNG;7790是exe,8297是rar
             {
                 return true;
             }
             else
             {
                 return false;
             }     }
      

  2.   

    这种方式你只能用
    if(System.IO.Path.GetExtension(Request.Files[i].FileName).ToLower()==".jpg" ||***)
    一个一个判断了,如果比较多,你就用个switch case语句
      

  3.   

    检查扩展名不行吧。如果别人把exe改为jpg上传呢。
      

  4.   

    改了方法 用if (IsAllowedExtension(Request.Files[i]) == true)上传其它类型文件没反应。 
      

  5.   

    你是在aspx页面用的吗?
    应该加上 runat="server" 吧!
      

  6.   

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.IO;public partial class FileUpload : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        protected void btn_save_Click(object sender, EventArgs e)
        {
            try
            {
                if (File1.PostedFile != null && File1.PostedFile.FileName != "")
                {
                    string fileName = File1.PostedFile.FileName;
                    int i = fileName.LastIndexOf("\\");
                    string newName = fileName.Substring(i + 1, fileName.Length - i - 1).ToLower();                Random ran = new Random();
                    string newRan = ran.Next(10000, 99999).ToString();
                    string date = DateTime.Now.ToString("yyyyMMddHHmmss");
                    string name = date + newRan + "_" + newName;                string type = newName.Substring(newName.LastIndexOf(".")).ToLower();
                    if (type == ".jpg" || type == ".bmp" || type == ".gif" || type == ".jpeg" || type == ".png")
                    {
                        if (File1.PostedFile.ContentLength < 204800)
                        {
                            File1.PostedFile.SaveAs(Server.MapPath("Upload/" + name));
                            Response.Write("<script>alert('上传成功!');</script>");
                        }
                        else
                        {
                            Response.Write("<script>alert('文件太大!');</script>");
                        }
                    }
                    else
                    {
                        Response.Write("<script>alert('文件格式不正确!');</script>");
                    }
                }
                else
                {
                    Response.Write("<script>alert('请添加图片!');</script>");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
      

  7.   

    如果放到IIS里,就会报错!!!