需求是这样的,我要在serlvet里判断上传的文件绝对是excel文件,目的是担心用户把其他文件扩展名改成xls类型上传带来的安全性问题,谢谢各位!excel扩展

解决方案 »

  1.   


    /// <summary>
    /// 判断文件是否为EXCEL。
    /// </summary>
    /// <param name="p_filePath"></param>
    /// <returns></returns>
    private bool isExcelFile(string p_filePath)
    {
        FileStream fs = new FileStream(p_filePath, FileMode.Open, FileAccess.Read);
        byte[] b = new byte[4];
        string str = "";
        if (Convert.ToInt32(fs.Length) > 0)
        {
            fs.Read(b, 0, 4);
            fs.Close();                 
            for (int i = 0; i < b.Length; i++)
            {
                str += Convert.ToString(b[i], 16);
            }                
        }
      
        return str.ToUpper() == "D0CF11E0" ? true : false;
    }
      

  2.   

    上传后,写个读取xls的方法,如果能读到里面的sheet、cell或者cell的值,能够读取应该就是xls文件,如果不能读取那么就不是xls文件。
      

  3.   

    试了一下效果,貌似可以的,我用的poi,你也可以用jxl。你看看可以不。package poi;import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;import org.apache.log4j.Logger;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;public class IsXLS {
    private static File file_one = new File("C:/Documents and Settings/Administrator/桌面/tset.xls");
    private static File file_two = new File("C:/Documents and Settings/Administrator/桌面/1.xls");
    private static Logger logger = Logger.getLogger(IsXLS.class);
    public static void main(String[] args) throws Exception {
    System.out.println(isXLSFile(file_one));// 真的xls文件
    System.out.println(isXLSFile(file_two));// 假的xls文件
    } /**
     * 验证XLS文件真假
     * @param file
     * @return
     */
    public static boolean isXLSFile(File file) {
    boolean b = false;
    HSSFWorkbook workbook = null;
    FileInputStream in = null;
    try {
    in = new FileInputStream(file);
    if (in != null) {
    workbook = new HSSFWorkbook(in);
    if (workbook != null) {
    b = true;
    }
    } else {
    logger.info("这是空文件");
    }
    } catch (Exception e) {
    // logger.info("这不是xls类型文件");
    } finally {
    try {
    if (in != null)
    in.close();
    in = null;
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    return b;
    }
    }