通过文件的后缀来判断文件类型是不行的,比如我把一个文本文件改成xx.jpg文件,这样通过后缀在进步判断的文件的类型还是image/jpeg的,还能上传的所以判断失误的,其实对于这种的判断在struts2中已经实现判断的,即时你改了后缀也上传不上去,struts2中的采用的是配置文件的形式去实现的,具体实现我就不详细说了,大体的是它把需要的参数通过配置文件传给struts2的上传拦截器,我也看过其内部代码,处理很麻烦,我是菜鸟所以没心情看那摩复杂的代码,再说那样的代码,我们的项目也不可能用。 我的需求是不用配置文件来实现文件类型的判断。我也写了方法实现了上传的对上面的问题的判断,但是缺乏权威性,在项目中难以应用,所以很纠结!!!!以下是代码 大虾们给看看 提下意见
/**
* 该方法用于判断jpg图片格式的文件类型
* @param hifile 上传的文件
* @return true是上传的jpg类型的图片 false侧不是上传的jpg图片
*/
public static boolean IsAllowedExtension(File hifile){
FileInputStream in = null;
try {
in = new FileInputStream(hifile);
byte[] arr = new byte[3] ;//读取上传文件的前3位二进制
byte[] arr1 = new byte[]{-1, -40, -1};//jpg图片的二进制前3位
in.read(arr);
boolean flag = true;
//对于上的文件进行文件的前3位的二进制的对比进行判断
for(int i =0; i<arr1.length; i++){
if(arr[i]!=arr1[i]){
flag = false;
}
}
if(!flag){
return false;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(in!=null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return true;}
/**
* 该方法用于判断jpg图片格式的文件类型
* @param hifile 上传的文件
* @return true是上传的jpg类型的图片 false侧不是上传的jpg图片
*/
public static boolean IsAllowedExtension(File hifile){
FileInputStream in = null;
try {
in = new FileInputStream(hifile);
byte[] arr = new byte[3] ;//读取上传文件的前3位二进制
byte[] arr1 = new byte[]{-1, -40, -1};//jpg图片的二进制前3位
in.read(arr);
boolean flag = true;
//对于上的文件进行文件的前3位的二进制的对比进行判断
for(int i =0; i<arr1.length; i++){
if(arr[i]!=arr1[i]){
flag = false;
}
}
if(!flag){
return false;
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(in!=null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return true;}
解决方案 »
- struts的用DownloadAction问题
- 请教个通过链接分类显示信息的问题,请看内容
- java 调用sql存储过程分页同时获取一个结果集和输出参数
- Tomcat上的应用程序启动顺序可以调整吗? 比如我要让一个应用先启,一个后启.
- 使用<html:iterate>中遇到的困难
- 正则限制数量问题,也许你也遇到过
- Jbulider9 + struts1.1 使用模板标记出错
- 求软件下载。。。
- SSH如何导入数据?
- json+strusts错误:怎么接收int型数据呢?-Error setting expression 'age' with value ['6789', ]
- 抽签系统
- ireport柱状图值标签显示问题
System.out.println(bi.getType());如果是该名字的话 应该会抛异常的
public int getType()返回图像类型。如果它不是已知的类型之一,则返回 TYPE_CUSTOM 。 返回:
此 BufferedImage 的图像类型。没发现该方法抛异常啊?
每种图片应该有一套标准格式的。