• plupload批量上传分片(后台代码)


    plupload批量上传分片功能,

    对于文件比较大的情况下,plupload支持分片上传,后台代码如下:

        /**
         *
          * 方法:upLoadSpecialProgramPictrue
          * 方法说明:本地节目导入
          * @return
          * @author     wangHao
         * @throws Exception
          * @date       2015年6月9日
         */
        @RequestMapping("/localUpLoadProgram")
        @ResponseBody
        public void localUpLoadProgram(
                @RequestParam("file") CommonsMultipartFile[] file,
                HttpServletResponse response,HttpServletRequest request) throws Exception {
           
            boolean isMultipart = ServletFileUpload.isMultipartContent(request);
            if(isMultipart){
                String fileName = "";
                Integer chunk = 0, chunks = 0;
                
                //检查文件目录,不存在则创建
                String relativePath = "/plupload/files/";
                String realPath = ConfigUtil.class.getResource("/").getPath();
                File folder = new File(realPath + relativePath);
                if (!folder.exists()) {
                    folder.mkdirs();
                }
                
                DiskFileItemFactory diskFactory = new DiskFileItemFactory();
                // threshold 极限、临界值,即硬盘缓存 1M 
                diskFactory.setSizeThreshold(4 * 1024);
    
                ServletFileUpload upload = new ServletFileUpload(diskFactory);
                // 设置允许上传的最大文件大小(单位MB)
                upload.setSizeMax(1024 * 1048576);
                upload.setHeaderEncoding("UTF-8");
                List<FileItem> fileList = new ArrayList<FileItem>();
                fileList.add(file[0].getFileItem());
                Iterator<FileItem> it = fileList.iterator();
                FileItem item = it.next();
                String name = item.getFieldName();
                InputStream input = item.getInputStream();
                fileName = item.getName();
                chunk =  Integer.parseInt(request.getParameter("chunk"));
                chunks =  Integer.parseInt(request.getParameter("chunks"));   
                // 处理上传文件内容
                if (!item.isFormField()) {
                    //目标文件
                    File destFile = new File(folder, fileName);
                    //文件已存在删除旧文件(上传了同名的文件)
                    if (chunk == 0 && destFile.exists()) { 
                        destFile.delete(); 
                        destFile = new File(folder, fileName);
                    }
                    //合成文件
                    appendFile(input, destFile); 
                    if (chunk == chunks - 1) { 
                        System.out.println("上传完成");
                    }else {
                        System.out.println("还剩["+(chunks-1-chunk)+"]个块文件");
                    }   
                }
            }
    }
    private void appendFile(InputStream in, File destFile) {
            OutputStream out = null;
            try {
                // plupload 配置了chunk的时候新上传的文件append到文件末尾
                if (destFile.exists()) {
                    out = new BufferedOutputStream(new FileOutputStream(destFile, true), BUFFER_SIZE);
                } else {
                    out = new BufferedOutputStream(new FileOutputStream(destFile),BUFFER_SIZE);
                }
                in = new BufferedInputStream(in, BUFFER_SIZE);
                
                int len = 0;
                byte[] buffer = new byte[BUFFER_SIZE];         
                while ((len = in.read(buffer)) > 0) {
                    out.write(buffer, 0, len);
                }
            } catch (Exception e) {
            } finally {    
                try {
                    if (null != in) {
                        in.close();
                    }
                    if(null != out){
                        out.close();
                    }
                } catch (IOException e) {
                }
            }
        }
  • 相关阅读:
    day17---无参装饰器
    day17---作业
    python面向过程的编程思想
    算法之二分法
    python递归函数
    pyth作业3/25
    三元表达式、生成式、生成器表达式
    python 3/24作业
    python生成器
    python 迭代器
  • 原文地址:https://www.cnblogs.com/holdon521/p/4625053.html
Copyright © 2020-2023  润新知