TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
为了解决在用户上传文件的时候在服务器端判断文件类型的问题,故用获取文件头的方式,直接读取文件的前几个字节,来判断上传文件是否符合格式。具体代码如下:
- import java.io.*;
- public class TestType{
- /**
- * byte数组转换成16进制字符串
- * @param src
- * @return
- */
- public static String bytesToHexString(byte[] src){
- StringBuilder stringBuilder = new StringBuilder();
- if (src == null || src.length <= 0) {
- return null;
- }
- for (int i = 0; i < src.length; i++) {
- int v = src[i] & 0xFF;
- String hv = Integer.toHexString(v);
- if (hv.length() < 2) {
- stringBuilder.append(0);
- }
- stringBuilder.append(hv);
- }
- return stringBuilder.toString();
- }
- /**
- * 根据文件流读取图片文件真实类型
- * @param is
- * @return
- */
- public static String getTypeByStream(FileInputStream is){
- byte[] b = new byte[4];
- try {
- is.read(b, 0, b.length);
- } catch (IOException e) {
- e.printStackTrace();
- }
- String type = bytesToHexString(b).toUpperCase();
- System.out.println(type);
- if(type.contains("FFD8FF")){
- return "jpg";
- }else if(type.contains("89504E47")){
- return "png";
- }else if(type.contains("47494638")){
- return "gif";
- }else if(type.contains("49492A00")){
- return "tif";
- }else if(type.contains("424D")){
- return "bmp";
- }
- return type;
- }
- public static void main(String[] args) throws Exception {
-
- String src = "c:/java/9c.jpg";
- FileInputStream is = new FileInputStream(src);
- String type = getTypeByStream(is);
- System.out.println(type);
- }
- }
复制代码 C:java>java TestType
FFD8FFE0
jpg
源码下载:http://file.javaxxz.com/2014/11/2/235819234.zip |
|