• SpringMVC IO 文件上传


      1 public class FileUtil {
      2 
      3 
      4     /**
      5      * 读取文件内容,作为字符串返回
      6      */
      7     public static String readFileAsString(String filePath) throws IOException {
      8         File file = new File(filePath);
      9         if (!file.exists()) {
     10             throw new FileNotFoundException(filePath);
     11         }
     12 
     13         if (file.length() > 1024 * 1024 * 1024) {
     14             throw new IOException("File is too large");
     15         }
     16 
     17         StringBuilder sb = new StringBuilder((int) (file.length()));
     18         // 创建字节输入流
     19         FileInputStream fis = new FileInputStream(filePath);
     20         // 创建一个长度为10240的Buffer
     21         byte[] bbuf = new byte[10240];
     22         // 用于保存实际读取的字节数
     23         int hasRead = 0;
     24         while ( (hasRead = fis.read(bbuf)) > 0 ) {
     25             sb.append(new String(bbuf, 0, hasRead));
     26         }
     27         fis.close();
     28         return sb.toString();
     29     }
     30 
     31     /**
     32      * 根据文件路径读取byte[] 数组
     33      */
     34     public static byte[] readFileByBytes(String filePath) throws IOException {
     35         File file = new File(filePath);
     36         if (!file.exists()) {
     37             throw new FileNotFoundException(filePath);
     38         } else {
     39             ByteArrayOutputStream bos = new ByteArrayOutputStream((int) file.length());
     40             BufferedInputStream in = null;
     41 
     42             try {
     43                 in = new BufferedInputStream(new FileInputStream(file));
     44                 short bufSize = 1024;
     45                 byte[] buffer = new byte[bufSize];
     46                 int len1;
     47                 while (-1 != (len1 = in.read(buffer, 0, bufSize))) {
     48                     bos.write(buffer, 0, len1);
     49                 }
     50 
     51                 byte[] var7 = bos.toByteArray();
     52                 return var7;
     53             } finally {
     54                 try {
     55                     if (in != null) {
     56                         in.close();
     57                     }
     58                 } catch (IOException var14) {
     59                     var14.printStackTrace();
     60                 }
     61 
     62                 bos.close();
     63             }
     64         }
     65     }
     66 
     67     /*
     68      * 通过流的方式上传文件
     69      * @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象
     70      * org.springframework.web.multipart.commons.CommonsMultipartFile(类)
     71      * 中间会生成临时文件,会自动删除
     72      * 效率NO.3
     73      * 稍微大的文件超时,jq.js会报10254错误,前端显示404不过文件可以上传
     74      * 需要在在dispatcher.xml里面配置试图解析器(<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">)
     75      */
     76 
     77     public static void  fileUpload1(CommonsMultipartFile file) throws IOException {
     78 //        FileItem fff=file.getFileItem();
     79 //        System.out.println(fff.getName()+"<<<<getName()>>>>");
     80 //        System.out.println(fff.getFieldName()+"<<<<getFieldName()>>>>>");    ;
     81 //        System.out.println(fff.isFormField()+"<<<<isFormField()>>>>");
     82 //        //在这里面规定上传文件的类型
     83 //        System.out.println(fff.getContentType().endsWith(".doc")+"<<<<getContentType()>>>>");
     84 //        System.out.println(fff.isInMemory()+"<<<<isInMemory()>>>>");
     85 //        System.out.println(fff.getSize()+"<<<<getSize()>>>>");
     86 
     87         //用来检测程序运行时间
     88         long  startTime=System.currentTimeMillis();
     89         if(file.isEmpty()){
     90             System.out.println("文件不存在(或大小为0)");
     91             return;
     92         }
     93         String renamePath=FileUtil.renameFile(file.getOriginalFilename());
     94         OutputStream os = null;
     95         InputStream is = null;
     96         try {
     97             //获取输出流
     98             os=new FileOutputStream(renamePath);
     99             //获取输入流 CommonsMultipartFile 中可以直接得到文件的流
    100              is=file.getInputStream();
    101             int temp;
    102             //一个一个字节的读取并写入
    103             while((temp=is.read())!=(-1))
    104             {
    105                 os.write(temp);
    106             }
    107 
    108 
    109         } catch (FileNotFoundException e) {
    110             // TODO Auto-generated catch block
    111             e.printStackTrace();
    112         }finally{
    113             os.flush();
    114             os.close();
    115             is.close();
    116         }
    117         long  endTime=System.currentTimeMillis();
    118         System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");
    119     }
    120 
    121 
    122     /*
    123      * 采用file.Transto 来保存上传的文件【速度最快】
    124      *     org.springframework.web.multipart.commons.CommonsMultipartFile(类)
    125      *中间会生成临时文件,会自动删除
    126      * 效率NO.2
    127      * 稍微大的文件超时,jq.js会报10254错误,前端显示404不过文件可以上传
    128      *     * 需要在在dispatcher.xml里面配置试图解析器(<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">)
    129 
    130      */
    131     public static void  fileUpload2(CommonsMultipartFile file) throws IOException {
    132         if(file.isEmpty()){
    133             System.out.println("文件不存在");
    134             return;
    135         }
    136         long  startTime=System.currentTimeMillis();
    137          String renameFilePath=FileUtil.renameFile(file.getOriginalFilename());
    138         try{
    139             File newFile=new File(renameFilePath);
    140             //通过CommonsMultipartFile的方法直接写文件(注意这个时候)
    141             file.transferTo(newFile);
    142         }catch (Exception e){
    143             System.out.println("方法2上传文件转换失败");
    144         }
    145 
    146         long  endTime=System.currentTimeMillis();
    147         System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms");
    148 
    149     }
    150 
    151     /*推荐使用使用
    152      *采用spring提供的上传文件的方法
    153      * package org.springframework.web.multipart.commons.CommonsMultipartResolver;
    154      * 需要在在dispatcher.xml里面配置试图解析器(<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">)
    155      * 中间会生成临时文件,会自动删除
    156      * 支持多文件上传
    157      * 速度NO.1
    158      */
    159 
    160     public static void  springUpload(HttpServletRequest request) throws IllegalStateException, IOException
    161     {
    162         long  startTime=System.currentTimeMillis();
    163         //将当前上下文初始化给  CommonsMutipartResolver (多部分解析器)
    164         CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
    165                 request.getSession().getServletContext());
    166         //检查form中是否有enctype="multipart/form-data"
    167         if(multipartResolver.isMultipart(request))
    168         {
    169             //将request变成多部分request
    170             MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
    171             //获取multiRequest 中所有的文件名
    172             Iterator iter=multiRequest.getFileNames();
    173 //            List<FileItem>
    174             while(iter.hasNext())
    175             {
    176                 //一次遍历所有文件
    177                 MultipartFile file=multiRequest.getFile(iter.next().toString());
    178                 if(file!=null)
    179                 {
    180                   String renamePath=  FileUtil.renameFile(file.getOriginalFilename());
    181                     //上传
    182                     file.transferTo(new File(renamePath));
    183                 }
    184 
    185             }
    186 
    187         }
    188         long  endTime=System.currentTimeMillis();
    189         System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms");
    190 
    191     }
    192 
    193     /***基于
    194      * commons-fileupload
    195      *commons-io
    196      *上传
    197      *需要注销spring的上传文件解析器
    198      * 因为protected MultipartParsingResult parseRequest(HttpServletRequest request) throws MultipartException {
    199      *         String encoding = this.determineEncoding(request);
    200      *         FileUpload fileUpload = this.prepareFileUpload(encoding);已经调用FileUpload进行解析封装为自己的对象MultipartParsingResult
    201      *         再次List<FileItem> list = upload.parseRequest(request);解析时为空导致集合为空
    202      * */
    203        public static void fileUpload3(HttpServletRequest request, HttpServletResponse response){
    204         //判断是不是post提交
    205          boolean isMultipart =ServletFileUpload.isMultipartContent(request);
    206            if (isMultipart == true) {
    207                //初始化FiletItem工厂
    208                FileItemFactory fif =new DiskFileItemFactory();
    209                ServletFileUpload upload = new ServletFileUpload(fif);
    210                upload.setHeaderEncoding("utf-8");
    211                try {
    212                    //解析表单请求
    213                    List<FileItem> list = upload.parseRequest(request);
    214                    for (FileItem fi : list) {
    215                        //普通表单元素处理start
    216                        if (fi.isFormField()) {//判断是不是普通变淡属性
    217                            String fieldname = fi.getFieldName();
    218                            if (fieldname.equals("productNmae")) {
    219                                String projectName = null;
    220                                try {
    221                                    projectName = fi.getString("utf-8");
    222                                } catch (UnsupportedEncodingException e) {
    223                                    System.out.println("不支持utf-8编码");
    224                                }
    225                                System.out.println(projectName);
    226                            } else if (fieldname.equals("file")) {
    227                                try {
    228                                    System.out.println(fi.getString("utf-8"));
    229                                } catch (UnsupportedEncodingException e) {
    230                                    System.out.println("不支持utf-8编码");
    231                                }
    232                                ;
    233                            }
    234                            //普通表单元素处理end
    235                        } else {//是文件类型判断其大小,为0继续for循环
    236                            if (fi.getSize() == 0) {
    237                                continue;
    238                            }
    239                          String  newFileName =FileUtil.renameFile(fi.getName());
    240                            try {
    241                                fi.write(new File(newFileName));
    242                            } catch (Exception e) {
    243                                e.printStackTrace();
    244                            }
    245 
    246                        }
    247                    }
    248                } catch (FileUploadException e) {
    249                    e.printStackTrace();
    250                }
    251 
    252            }
    253 
    254        }
    255     /***
    256      * 上传文件命名公共方法
    257      * */
    258     public static synchronized String renameFile(String originalFilename){
    259         System.out.println("原文件名:"+originalFilename);
    260         //桌面路径
    261         String prefix = originalFilename.substring(originalFilename.lastIndexOf("."));
    262         String newFileName =new Date().getTime()+ prefix;
    263         String desktopPath= FileSystemView.getFileSystemView().getHomeDirectory().getAbsolutePath()+"\"+newFileName;
    264         System.out.println("新文件名:"+newFileName);
    265         return  desktopPath;
    266 
    267     }
    268 
    269 //    <!-- 多部分文件上传 -->
    270 //<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    271 //     <property name="maxUploadSize" value="104857600" />
    272 //     <property name="maxInMemorySize" value="4096" />
    273 //     <property name="defaultEncoding" value="UTF-8"></property>
    274 //</bean>
    275 }
    一点点学习,一丝丝进步。不懈怠,才不会被时代淘汰
  • 相关阅读:
    江苏高考的程序题
    visio使用小记
    debian+postfix+dovecot+squirrelmail安装配置笔记
    System.Net.Mail
    DBHelper
    朝发白帝城
    《计算机网络》复习题2010
    mvc3在view中获取是否有验证错误
    Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
    ASP.NET MVC3 Model验证总结
  • 原文地址:https://www.cnblogs.com/wangbiaohistory/p/11050113.html
Copyright © 2020-2023  润新知