在使用ashx上传图片的时候,我想限制只传图片格式,怎么限制?
我看了下 MIME的类型是 application/octet-stream 
这样的可以限制为图片格式吗?

解决方案 »

  1.   

    上传的时候获取文件后缀名,如果不是gif jpg的文件就不允许上传
      

  2.   

    有一个效率低下的方法,就是Image.FromStream看看有没有异常是就知道是不是真正的图片,当然客户端的图片格式检测也是不能少的。
      

  3.   

    HttpPostedFile file = context.Request.Files[i];
    获取文件头判断文件格式
    如JPEG (jpg),文件头:FFD8FF 
    PNG (png),文件头:89504E47 
    GIF (gif),文件头:47494638 
    TIFF (tif),文件头:49492A00 
      

  4.   

    一般都是在JS中就判断了!
     function checkImageFormat(fileName) {
       var extension = /\.(gif|jpg|jpeg|bmp)$/i;
       if(!extension.test(fileName)) {
          return false;
       }
       return true;
    }
    如果后台的话,那先获取文件的后缀名Path.GetExtension(stirng fileName)
      

  5.   


    Image.FromStream 啊。
    如果是图片每种文件有一个唯一的GUid值
      

  6.   

    Image.FromStream 怎么判断
    以及文件头怎么判断
    兄弟来点 code
      

  7.   

    一种:
     String fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
                    String[] allowedExtensions = { ".gif", ".png", ".bmp", ".jpg" };
                    for (int i = 0; i < allowedExtensions.Length; i++)
                    {
                        if (fileExtension == allowedExtensions[i])
                        {
                            fileOK = true;
                            break;
                        }
                    }
    二种:
     <File>
        <id>UpImgFile</id>
        <format>#.jpg#.png#.bmp#.gif#.jpeg</format>
      </File>
      
    读取xml判断
      

  8.   

    第一种:System.IO.Path.GetExtension(FileUpload1.FileName)  直接获取文件后缀名,但不安全
    第二种:
    //真正判断文件类型的关键函数
         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;
             }     }
      

  9.   

    咋这杯具呐。。
    try
                {
                    Image img = Image.FromStream(Request.Files[0].InputStream);
                    img.RawFormat.Guid.ToString() == "xxxxx????xxxxxx" //不同图像格式有不同的Guid
                }
                catch (ArgumentException exp)
                {
                    //不是图像流
                }