zoukankan      html  css  js  c++  java
  • SpringMVC上传文件以流方式判断类型附常用类型

            此类中判断类型所截取的byte 长度暂不确定,请使用者测试过使用
    package com.tg.common.other;

    import com.tg.common.tginterface.TG_FileUpload;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.InetAddress;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    import javax.servlet.http.HttpServletRequest;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.multipart.MultipartHttpServletRequest;

    public class MultipartFileUpLoad  {
        
    public Map<String, String> FILE_TYPE_MAP = new HashMap<String, String>();

        
    /**
         * 封装上传
         * 
         * 
    @param request
         * 
    @param fileName
         *            页面表单file元素name
         * 
    @param folderName创建的文件夹名
         * 
    @param type    判断类型
         * 
    @return 本地文件路径
         
    */

        
    public String transferToFile(HttpServletRequest request, String fileName, String folderName,
                FileTypeEnum type) 
    throws Exception {
            MultipartHttpServletRequest multipartRequest 
    = (MultipartHttpServletRequest) request;
            MultipartFile mfile 
    = multipartRequest.getFile(fileName);

            
    if (mfile.getSize() == 0) {
                
    throw new Exception("请选择文件!");
            }
            FILE_TYPE_MAP.clear();
            
    if (type.equals(FileTypeEnum.audio)) {
                getAudioFileType();
            } 
    else if (type.equals(FileTypeEnum.picture)) {
                getPicFileType();
            } 
    else if (type.equals(FileTypeEnum.video)) {
                getVideoFileType();
            }
            
            InputStream is 
    = mfile.getInputStream();
            ByteArrayOutputStream bytestream 
    = new ByteArrayOutputStream();
           
            
    for (int i = 0; i < 10; i++) {
                
    int a = is.read();
                bytestream.write(a);
            }
            
    byte imgdata[]=bytestream.toByteArray();
            
            
            
    if (getFileTypeByStream(imgdata) == null) {
                
    throw new Exception("不是指定类型文件!");
            }
            
    try {
                InetAddress addr 
    = InetAddress.getLocalHost(); // 获取本地计算机信息

                File file 
    = new File(request.getSession().getServletContext()
                        .getRealPath(
                                
    "/upload/"
                                        
    + addr.getHostName().toString()
                                        
    + folderName
                                        
    + "/"
                                        
    + new SimpleDateFormat("yyyy-MM-dd")
                                                .format(
    new Date()) + "/"
                                        
    + mfile.getOriginalFilename()));
                
    if (!file.exists()) { // 判断文件夹是否存在
                    file.mkdirs(); // 不存在则创建
                }
                mfile.transferTo(file);
                System.out.println(file.getPath());
                
    return file.getPath();
            } 
    catch (IllegalStateException e) {
                e.printStackTrace();
            } 
    catch (IOException e) {
                e.printStackTrace();
            }
            
    return null;
        }

        
        
    public String getFileTypeByStream(byte[] b) {
            String filetypeHex 
    = String.valueOf(getFileHexString(b));
            System.out.println(filetypeHex);
            Iterator
    <Entry<String, String>> entryiterator = FILE_TYPE_MAP
                    .entrySet().iterator();
            
    while (entryiterator.hasNext()) {
                Entry
    <String, String> entry = entryiterator.next();
                String fileTypeHexValue 
    = entry.getValue().toUpperCase();
                
    if (filetypeHex.toUpperCase().startsWith(fileTypeHexValue)) {
                    
    return entry.getKey();
                }
            }
            
    return null;
        }

        
    public String getFileHexString(byte[] b) {
            StringBuilder stringBuilder 
    = new StringBuilder();
            
    if (b == null || b.length <= 0) {
                
    return null;
            }
            
    for (int i = 0; i < b.length; i++) {
                
    int v = b[i] & 0xFF;
                String hv 
    = Integer.toHexString(v);
                
    if (hv.length() < 2) {
                    stringBuilder.append(
    0);
                }
                stringBuilder.append(hv);
            }
            
    return stringBuilder.toString();
        }

     
    public void getVideoFileType() {
            FILE_TYPE_MAP.put("ram", "2E7261FD"); // Real Audio (ram)
            FILE_TYPE_MAP.put("rm", "2E524D46"); // Real Media (rm)
            FILE_TYPE_MAP.put("mov", "00000014667479707174"); // Quicktime (mov)
            // FILE_TYPE_MAP.put("rmvb", "2e524d46000000120001"); // rmvb
            FILE_TYPE_MAP.put("avi", "41564920");
            FILE_TYPE_MAP.put("avi", "52494646b440c02b4156");
            FILE_TYPE_MAP.put("flv", "464C5601050000000900");
            FILE_TYPE_MAP.put("mp4", "00000020667479706d70");
            FILE_TYPE_MAP.put("wmv", "3026b2758e66CF11a6d9");
            // FILE_TYPE_MAP.put("3gp", "00000014667479703367");
            FILE_TYPE_MAP.put("mkv", "1a45dfa3010000000000");
        }

        public void getPicFileType() {
            FILE_TYPE_MAP.put("jpg", "FFD8FF"); // JPEG (jpg)
            FILE_TYPE_MAP.put("png", "89504E47"); // PNG (png)
            FILE_TYPE_MAP.put("gif", "47494638"); // GIF (gif)
            FILE_TYPE_MAP.put("bmp", "424D"); // Windows Bitmap (bmp)
            FILE_TYPE_MAP.put("png", "89504E470D0a1a0a0000"); // PNG (png)
            FILE_TYPE_MAP.put("bmp", "424d228c010000000000"); // 16色位图(bmp)
            FILE_TYPE_MAP.put("bmp", "424d8240090000000000"); // 24位位图(bmp)
            FILE_TYPE_MAP.put("bmp", "424d8e1b030000000000"); // 256色位图(bmp
        }

        public void getAudioFileType() {
            FILE_TYPE_MAP.put("wav", "57415645"); // Wave (wav)
            FILE_TYPE_MAP.put("mid", "4D546864"); // MIDI (mid)
            FILE_TYPE_MAP.put("mp3", "49443303000000002176");
            FILE_TYPE_MAP.put("wav", "52494646e27807005741");
            FILE_TYPE_MAP.put("aac", "fff1508003fffcda004c");
            FILE_TYPE_MAP.put("wv", "7776706ba22100000704");
            FILE_TYPE_MAP.put("flac", "664c6143800000221200");
        }

        
    public MultipartFileUpLoad(){}
    }

     




            FILE_TYPE_MAP.put(
    "ffd8ffe000104a464946""jpg"); //JPEG (jpg)    
            FILE_TYPE_MAP.put("89504e470d0a1a0a0000""png"); //PNG (png)    
            FILE_TYPE_MAP.put("47494638396126026f01""gif"); //GIF (gif)    
            FILE_TYPE_MAP.put("49492a00227105008037""tif"); //TIFF (tif)    
            FILE_TYPE_MAP.put("424d228c010000000000""bmp"); //16色位图(bmp)    
            FILE_TYPE_MAP.put("424d8240090000000000""bmp"); //24位位图(bmp)    
            FILE_TYPE_MAP.put("424d8e1b030000000000""bmp"); //256色位图(bmp)    
            FILE_TYPE_MAP.put("41433130313500000000""dwg"); //CAD (dwg)    
            FILE_TYPE_MAP.put("3c21444f435459504520""html"); //HTML (html)
            FILE_TYPE_MAP.put("3c21646f637479706520""htm"); //HTM (htm)
            FILE_TYPE_MAP.put("48544d4c207b0d0a0942""css"); //css
            FILE_TYPE_MAP.put("696b2e71623d696b2e71""js"); //js
            FILE_TYPE_MAP.put("7b5c727466315c616e73""rtf"); //Rich Text Format (rtf)    
            FILE_TYPE_MAP.put("38425053000100000000""psd"); //Photoshop (psd)    
            FILE_TYPE_MAP.put("46726f6d3a203d3f6762""eml"); //Email [Outlook Express 6] (eml)      
            FILE_TYPE_MAP.put("d0cf11e0a1b11ae10000""doc"); //MS Excel 注意:word、msi 和 excel的文件头一样    
            FILE_TYPE_MAP.put("d0cf11e0a1b11ae10000""vsd"); //Visio 绘图    
            FILE_TYPE_MAP.put("5374616E64617264204A""mdb"); //MS Access (mdb)      
            FILE_TYPE_MAP.put("252150532D41646F6265""ps");    
            FILE_TYPE_MAP.put(
    "255044462d312e350d0a""pdf"); //AdobeAcrobat (pdf)  
            FILE_TYPE_MAP.put("2e524d46000000120001""rmvb"); //rmvb/rm相同  
            FILE_TYPE_MAP.put("464c5601050000000900""flv"); //flv与f4v相同  
            FILE_TYPE_MAP.put("00000020667479706d70""mp4");
            FILE_TYPE_MAP.put(
    "49443303000000002176""mp3");
            FILE_TYPE_MAP.put(
    "000001ba210001000180""mpg"); //    
            FILE_TYPE_MAP.put("3026b2758e66cf11a6d9""wmv"); //wmv与asf相同    
            FILE_TYPE_MAP.put("52494646e27807005741""wav"); //Wave (wav)  
            FILE_TYPE_MAP.put("52494646d07d60074156""avi");  
            FILE_TYPE_MAP.put(
    "4d546864000000060001""mid"); //MIDI (mid)  
            FILE_TYPE_MAP.put("504b0304140000000800""zip");    
            FILE_TYPE_MAP.put(
    "526172211a0700cf9073""rar");  
            FILE_TYPE_MAP.put(
    "235468697320636f6e66""ini");  
            FILE_TYPE_MAP.put(
    "504b03040a0000000000""jar");
            FILE_TYPE_MAP.put(
    "4d5a9000030000000400""exe");//可执行文件
            FILE_TYPE_MAP.put("3c25402070616765206c""jsp");//jsp文件
            FILE_TYPE_MAP.put("4d616e69666573742d56""mf");//MF文件
            FILE_TYPE_MAP.put("3c3f786d6c2076657273""xml");//xml文件
            FILE_TYPE_MAP.put("494e5345525420494e54""sql");//xml文件
            FILE_TYPE_MAP.put("7061636b616765207765""java");//java文件
            FILE_TYPE_MAP.put("406563686f206f66660d""bat");//bat文件
            FILE_TYPE_MAP.put("1f8b0800000000000000""gz");//gz文件
            FILE_TYPE_MAP.put("6c6f67346a2e726f6f74""properties");//bat文件
            FILE_TYPE_MAP.put("cafebabe0000002e0041""class");//bat文件
            FILE_TYPE_MAP.put("49545346030000006000""chm");//bat文件
            FILE_TYPE_MAP.put("04000000010000001300""mxp");//bat文件
            FILE_TYPE_MAP.put("504b0304140006000800""docx");//docx文件
            FILE_TYPE_MAP.put("d0cf11e0a1b11ae10000""wps");//WPS文字wps、表格et、演示dps都是一样的
            FILE_TYPE_MAP.put("6431303a637265617465""torrent");
            
              
            FILE_TYPE_MAP.put(
    "6D6F6F76""mov"); //Quicktime (mov)  
            FILE_TYPE_MAP.put("FF575043""wpd"); //WordPerfect (wpd)  
            FILE_TYPE_MAP.put("CFAD12FEC5FD746F""dbx"); //Outlook Express (dbx)    
            FILE_TYPE_MAP.put("2142444E""pst"); //Outlook (pst)      
            FILE_TYPE_MAP.put("AC9EBD8F""qdf"); //Quicken (qdf)    
            FILE_TYPE_MAP.put("E3828596""pwl"); //Windows Password (pwl)        
            FILE_TYPE_MAP.put("2E7261FD""ram"); //Real Audio (ram)   
  • 相关阅读:
    973. K Closest Points to Origin
    919. Complete Binary Tree Inserter
    993. Cousins in Binary Tree
    20. Valid Parentheses
    141. Linked List Cycle
    912. Sort an Array
    各种排序方法总结
    509. Fibonacci Number
    374. Guess Number Higher or Lower
    238. Product of Array Except Self java solutions
  • 原文地址:https://www.cnblogs.com/live365wang/p/1993744.html
Copyright © 2011-2022 走看看