• 将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();
                }  
            }
        }
    }
  • 相关阅读:
    学python走过的坑 二 element与elements的却别
    Python 进度条显示
    学python走过的坑一 类的实例化
    shell打印 菱形
    shell打印 倒等腰三角形
    互联网协议入门
    shell应用之批量添加用户实例
    Centos7不修改默认交换分区下添加交换分区
    shell中处理用户输入
    sed命令的介绍
  • 原文地址:https://www.cnblogs.com/zrui-xyu/p/5292594.html
Copyright © 2020-2023  润新知