将file转变成contenthash

一、将MultipartFile转file

CommonsMultipartFile cf= (CommonsMultipartFile)file;
        DiskFileItem fi = (DiskFileItem)cf.getFileItem(); 
        File fil = fi.getStoreLocation();

二、将file转换成contenthash

String contenthashSource = Utils.encryptSHA(Utils.file2byte(fil));
        String firstFileSource = contenthashSource.substring(0, 2);   //获取前两位作为存储一级文件夹
        String secondFileSource = contenthashSource.substring(2, 4);  //获取这两位作为存储二级文件夹    contenthash作为文件名

三、utils实体类

package cn.edu.hbcf.tools;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;


import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.DocumentFormat;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;

public class Utils {
    /**
     * 定义加密方式
     */
    private final static String KEY_SHA1 = "SHA-1";
    
    /**
     * 全局数组
     */
    private final static String[] hexDigits = { "0", "1", "2", "3", "4", "5",
            "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
    
    
    /**
     * SHA 加密
     * @param data 需要加密的字节数组
     * @return 加密之后的字节数组
     * @throws Exception
     */
    public static String encryptSHA(byte[] data) throws Exception {
        // 创建具有指定算法名称的信息摘要
//        MessageDigest sha = MessageDigest.getInstance(KEY_SHA);
        MessageDigest sha = MessageDigest.getInstance(KEY_SHA1);
        // 使用指定的字节数组对摘要进行最后更新
        sha.update(data);
        // 完成摘要计算并返回
        return byteArrayToHexString(sha.digest());
    }
    /**
     * 转换字节数组为十六进制字符串
     * @param bytes 字节数组
     * @return 十六进制字符串
     */
    private static String byteArrayToHexString(byte[] bytes) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < bytes.length; i++) {
            sb.append(byteToHexString(bytes[i]));
        }
        return sb.toString();
    }
    /**
     * 将一个字节转化成十六进制形式的字符串
     * @param b 字节数组
     * @return 字符串
     */
    private static String byteToHexString(byte b) {
        int ret = b;
        //System.out.println("ret = " + ret);
        if (ret < 0) {
            ret += 256;
        }
        int m = ret / 16;
        int n = ret % 16;
        return hexDigits[m] + hexDigits[n];
    }
    public static byte[] file2byte(File file)  
    {  
        byte[] buffer = null;  
        try  
        {  
            FileInputStream fis = new FileInputStream(file);  
           ByteArrayOutputStream bos = new ByteArrayOutputStream();  
           byte[] b = new byte[1024];  
            int n;  
           while ((n = fis.read(b)) != -1)  
            {  
             bos.write(b, 0, n);  
            }  
           fis.close();  
            bos.close();  
            buffer = bos.toByteArray();  
        }  
       catch (FileNotFoundException e)  
       {  
           e.printStackTrace();  
        }  
        catch (IOException e)  
        {  
            e.printStackTrace();  
        }  
        return buffer;  
    } 
    /**
     * 
     * @方法描述: 将office文件装换成pdf存储
     * @param  
     * @return void  
     * @author 全冉
     * @date 2016-2-3
     */
    public static void convert(File input, File output, DocumentFormat outputFormat){   
        OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);   
        try {   
            connection.connect();   
            DocumentConverter converter = new OpenOfficeDocumentConverter(connection);   
            converter.convert(input, output, outputFormat);   
        } catch(Exception e) {   
            e.printStackTrace();   
        } finally {   
            try{ if(connection != null){connection.disconnect(); connection = null;}}catch(Exception e){}   
        }   
    }
    /**
     * 
     * @方法描述: 将文件复制到一个指定位置
     * @param  
     * @return void  
     * @author 全冉
     * @date 2016-2-3
     */
    public static void copy(File fil,File f){
        FileChannel in = null;  
        FileChannel out = null;  
        FileInputStream inStream = null;  
        FileOutputStream outStream = null;  
        try {  
            inStream = new FileInputStream(fil);  
            outStream = new FileOutputStream(f);  
            in = inStream.getChannel();  
            out = outStream.getChannel();  
            in.transferTo(0, in.size(), out);  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            try {
                inStream.close();
                in.close();  
                outStream.close();  
                out.close();  
            } catch (IOException e) {
                e.printStackTrace();
            }  
        }
    }
}
原文地址:https://www.cnblogs.com/zrui-xyu/p/5292594.html