請上次回答此問題的朋友接分

解决方案 »

  1.   

    以前是判斷文件名,不過有的用戶“太強”了,竟然將文件的擴展名改為JPG,因為規定只能用JPG格式的,所以程序就會出問題。所以判斷文件擴展名的方式治標不治本。
      

  2.   

    private bool CheckJGP(string strPath)
    {
       FileInfo file=new FileInfo(strPath);
       if(file.Exits)
       {
          if(file.Extension.Upper()==".JPG")
          {
           return true;
          }
        }
       return false;
    }
      

  3.   

    前贴讨论不外乎两种方法:
    1. 用C#本身提供的功能实现
    能实现(见前贴)、简单。
    2. 分析文件头格式
    这就要了解JPEG文件存储格式。
    所有的图片文件都包括:文件识别头和图象数据两部分,其中文件识别头用来让计算机判断是哪种文件格式。
    所有的JPEG文件以字符串“0xFFD8”开头,并以字符串“0xFFD9”结束。依此便可判别是否是JPEG文件。
      

  4.   

    我覺得最好的答案是“快樂的XX”回答的
    img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg)
      

  5.   

    string Extension="jpg" ;
    string fileName=System.IO.Path.GetFileName(PostedFile.FileName).ToLower(); 
    if(!fileName.EndsWith(Extension)) 
    return "你只能上传 "+Extension+" 类型的文件!"
      

  6.   

    取文件名.后面的字符,看是不是jpg。
      

  7.   

    此貼明天上午11:00結貼,TKS!
      

  8.   

    恩,就是判断.后面的字符是不是jpg
      

  9.   

    判断文件名是不是.jpg不就行了
      

  10.   

    再提一点个人看法:
    C#本身提供了许多有用的方法,而且都是成熟的算法,个人认为能用尽量用,无需重造轮子——这本不是C#的强项。private bool IsJpegImageFormat(string filesName)
    {
    if ( !File.Exists(fileName) ) return false;
    bool isTrue = false;
    using ( System.Drawing.Image img = System.Drawing.Image.FromFile(filesName) )
    {
    if ( img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg) ) isTrue = true;
    }
    return isTrue;
    }
      

  11.   

    private bool IsJpegImageFormat(string filesName)
    {
    if ( !File.Exists(fileName) ) return false;
    bool isTrue = false;
    using ( System.Drawing.Image img = System.Drawing.Image.FromFile(filesName) )
    {
    if ( img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg) ) isTrue = true;
    }
    return isTrue;
    }
    同意
      

  12.   

    http://www.cnblogs.com/jhtchina/articles/93412.html
      

  13.   

    什么是 EXIFExif是英文Exchangeable Image File(可交换图像文件)的缩写,最初由日本电子工业发展协会(JEIDA --Japan Electronic Industry Development Association) 制订,目前的最新版本是2.21 版。国际标准化组织(ISO)正在制订的相机文件设计标准(DCF -- Design role for Camera File system)可能以Exif2.1为基础。Exif 文件实际是JPEG文件的一种,遵从JPEG标准,只是在文件头信息中增加了有关拍摄信息的内容和索引图。所以你可以使用任何支持JPEG格式的图像工具软件观看或修改Exif文件,但,打开时可能看不到Exif信息,一旦修改,Exif信息可能丢失。简单来说,EXIF 信息就是由数码相机在拍摄过程中采集一系列的信息,然后把信息放置在我们熟知的 JPEG/TIFF 文件的头部,也就是说 EXIF 信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,主要包括摄影时的光圈、快门、ISO、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统(GPS)等信息。简单的说,它就好像是傻瓜相机的日期打印功能一样,只不过 EXIF 信息所记录的资讯更为详尽和完备。
    Exif21.pdf (580k) JEIDA 制定的EXIF 2.1 官方标准。(1998.6.12) 
    Exif22.pdf (750k) JEIDA 制定的EXIF 2.2 官方标准。(2002.4) 
    EXIF 文件格式说明 一个日本人写的 EXIF 英文参考文档,内容很详细。 
    Exif的标识  所有的JPEG文件以字符串“0xFFD8”开头,并以字符串“0xFFD9”结束。文件头中有一系列“0xFF??”格式的字符串,称为“标识”,用来标记JPEG文件的信息段。“0xFFD8”表示图像信息开始,“0xFFD9”表示图像信息结束,这两个标识后面没有信息,而其它标识紧跟一些信息字符。  0xFFE0 -- 0xFFEF之间的标识符称为“应用标记”,没有被常规JPEG文件利用,Exif正是利用这些信息串记录拍摄信息如快门速度、光圈值等,甚至可以包括全球定位信息。按照Exif2.1标准对这些标识符的定义,数码相机可以把各种拍摄信息记入数码图像中,应用软件可以读取这些数据,再按照Exif2.1标准,检索出它们的具体含义,一般而言包括以下一些信息:Image Description 图像描述、来源. 指生成图像的工具 
    Artist作者 有些相机可以输入使用者的名字 
    Make 生产者 指产品生产厂家 
    Model 型号 指设备型号 
    Orientation方向 有的相机支持,有的不支持 
    XResolution/YResolution X/Y方向分辨率 本栏目已有专门条目解释此问题。 
    ResolutionUnit分辨率单位 一般为PPI 
    Software软件 显示固件Firmware版本 
    DateTime日期和时间 
    YCbCrPositioning 色相定位 
    ExifOffsetExif信息位置,定义Exif在信息在文件中的写入,有些软件不显示。 
    ExposureTime 曝光时间 即快门速度 
    FNumber光圈系数 
    ExposureProgram曝光程序 指程序式自动曝光的设置,各相机不同,可能是Sutter Priority(快门优先)、Aperture Priority(快门优先)等等。 
    ISO speed ratings感光度 
    ExifVersionExif版本 
    DateTimeOriginal创建时间 
    DateTimeDigitized数字化时间 
    ComponentsConfiguration图像构造(多指色彩组合方案) 
    CompressedBitsPerPixel(BPP)压缩时每像素色彩位 指压缩程度 
    ExposureBiasValue曝光补偿。 
    MaxApertureValue最大光圈 
    MeteringMode测光方式, 平均式测光、中央重点测光、点测光等。 
    Lightsource光源 指白平衡设置 
    Flash是否使用闪光灯。 
    FocalLength焦距,一般显示镜头物理焦距,有些软件可以定义一个系数,从而显示相当于35mm相机的焦距 MakerNote(User Comment)作者标记、说明、记录 
    FlashPixVersionFlashPix版本 (个别机型支持) 
    ColorSpace色域、色彩空间 
    ExifImageWidth(Pixel X Dimension)图像宽度 指横向像素数 
    ExifImageLength(Pixel Y Dimension)图像高度 指纵向像素数 
    Interoperability IFD通用性扩展项定义指针 和TIFF文件相关,具体含义不详 
    FileSource源文件 Compression压缩比。
     
      

  14.   

    各位大大,在解答本贴疑问时能否顺便看看我的这个问题,谢谢了!http://community.csdn.net/Expert/topic/4959/4959397.xml?temp=.4622003
    问题:无组件上传的问题,,如何判断图片文件的扩展名是否被改过?
      

  15.   

    各位大大,在解答本贴疑问时能否顺便看看我的这个问题,谢谢了!http://community.csdn.net/Expert/topic/4959/4959397.xml?temp=.4622003
    问题:无组件上传的问题,,如何判断图片文件的扩展名是否被改过?比如程序中限制住只能传JPG格式的图片,但上传者把BMP格式的文件后缀改成JPG就又可以上传了,如何阻止这个情况发生呢?有没有简单有效的方法?
      

  16.   

    所有的JPEG文件以字符串“0xFFD8”开头,并以字符串“0xFFD9”结束。文件头中有一系列“0xFF??”格式的字符串,称为“标识”,用来标记JPEG文件的信息段。“0xFFD8”表示图像信息开始,“0xFFD9”表示图像信息结束,这两个标识后面没有信息,而其它标识紧跟一些信息字符。
      

  17.   

    OK 谢谢CmUpDate(博;海阔,风急;) 以"化境无组件上传"(ASP的)的程序为例,怎么找出这些特征呢?
    请到我的帖子里接分http://community.csdn.net/Expert/topic/4959/4959397.xml?temp=.4622003
      

  18.   

    都說不能用檢查擴展名的方式,用戶比你更有辦法,他會改擴展名的,有的對電腦一竅不通的把TXT文件都改成JPG,你咋辦?所以說只能用
    try
    {
    img = System.Drawing.Image.FromFile(ofd.FileName);
    }
    catch(Exception ex)
    {
    //此文件不是圖像文件! return;
    } if(!img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg))
    {
    //您所選擇的文件不是標准的JPG格式圖片! return;
    }
      

  19.   

    2. 分析文件头格式
    这就要了解JPEG文件存储格式。
    所有的图片文件都包括:文件识别头和图象数据两部分,其中文件识别头用来让计算机判断是哪种文件格式。
    所有的JPEG文件以字符串“0xFFD8”开头,并以字符串“0xFFD9”结束。依此便可判别是否是JPEG文件。这个好!!
      

  20.   

    ref:
    http://blog.csdn.net/knight94/archive/2006/05/07/711327.aspx你可以通过扩展信息来判断文件类型。
      

  21.   

    Bitmap bmp=new Bitmap("xxxx");
    bmp.Save("xxxx",System.Drawing.Imaging.ImageFormat.Jpeg);不管什么类型.先转成JPEG.不能转就会报错.
      

  22.   

    rivate bool IsJpegImageFormat(string filesName)
    {
    if ( !File.Exists(fileName) ) return false;
    bool isTrue = false;
    using ( System.Drawing.Image img = System.Drawing.Image.FromFile(filesName) )
    {
    if ( img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg) ) isTrue = true;
    }
    return isTrue;
    }
    en,这是正解!
      

  23.   

    Knight94(愚翁)
    ref:
    http://blog.csdn.net/knight94/archive/2006/05/07/711327.aspx
    你可以通过扩展信息来判断文件类型。
    -------------------------------------------------------------我试过这个方法,扩展信息的结果仍是改过的扩展名(资源管理器中显示的也是改过的文件类型),用这种方法不打开文件读取图像分辨率确实是好办法。 
      

  24.   

    这有一篇c的判断,我看内容比较简单,就是通过文件方式读出文件头一部分信息,然后拿出一些字节进行比对,你可以试着改写成c#,如果有问题可以再找我
    参看:
    http://www.codeproject.com/file/ImageClassifier.asp