批量文件上传,压缩后保存到服务器

    /**
     * 按照自己的规则重命名上传文件
     * @author:qiuchen
     * @createTime:2012-6-19
     * @param name
     * @return 命名后的文件名
     */
    private static String rename(String name){
        Long now = Long.parseLong(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())); 
       
        Long random = (long) (Math.random() * now); 
       
        String fileName = now + "" + random; 
       
        if (name.indexOf(".") != -1) { 
            fileName += name.substring(name.lastIndexOf(".")); 
        } 
 
        return fileName; 
    } 

 

    /**
     * 压缩后的文件名
     * @author:qiuchen
     * @createTime:2012-6-19
     * @param name
     * @return
     */
    private static String zipName(String name) { 
     String prefix = ""; 
     if (name.indexOf(".") != -1) { 
      prefix = name.substring(0, name.lastIndexOf(".")); 
        } else { 
            prefix = name; 
        }
        return prefix + ".zip"; 
    }

 

    /**
     * 批量上传文件

     * 把上传文件压缩后保存到服务器
     * @author:qiuchen
     * @createTime:2012-6-19
     * @param request
     * @param params
     * @param values
     * @return
     * @throws Exception
     */
 public static List<Map<String, Object>> upload(HttpServletRequest request,
   String[] params, Map<String, Object[]> values) throws Exception {
  
  List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
  //文件处理器
  MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
  //上传文件集合
  Map<String, MultipartFile> fileMap = mRequest.getFileMap();
  //获取文件存放地址(文件夹)
  String uploadDir = request.getSession().getServletContext().getRealPath("/") + FileOperateUtil.UPLOADDIR;
  //创建文件夹
  File file = new File(uploadDir);
  if (!file.exists()) {
   file.mkdir();
  }
  
  String fileName = null;
  int i = 0;
  for (Iterator<Map.Entry<String, MultipartFile>> it = fileMap.entrySet().iterator(); it.hasNext(); i++) {
   
   Map.Entry<String, MultipartFile> entry = it.next();
   MultipartFile mFile = entry.getValue();
   //原始文件名
   fileName = mFile.getOriginalFilename();
   //文件重命名
   String storeName = rename(fileName);
   //文件全路径
   String noZipName = uploadDir + storeName;
   //获取压缩文件的路径
   String zipName = zipName(noZipName);
   
   // 上传成为压缩文件
   ZipOutputStream outputStream = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipName)));
   
   outputStream.putNextEntry(new ZipEntry(fileName));
   //从流中复制出来
   FileCopyUtils.copy(mFile.getInputStream(), outputStream);
   
   Map<String, Object> map = new HashMap<String, Object>();
   // 固定参数值对
   map.put(FileOperateUtil.REALNAME, zipName(fileName));
   map.put(FileOperateUtil.STORENAME, zipName(storeName));
   map.put(FileOperateUtil.SIZE, new File(zipName).length());
   map.put(FileOperateUtil.SUFFIX, "zip");
   map.put(FileOperateUtil.CONTENTTYPE, "application/octet-stream");
   map.put(FileOperateUtil.CREATETIME, new Date());

   // 表单参数值对
   for (String param : params) {
    map.put(param, values.get(param)[i]);
   }
   result.add(map);
  }
  return result;
 }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值