批量文件上传,压缩后保存到服务器
??? /**
???? * 按照自己的规则重命名上传文件
???? * @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;
?}