package com.framework.common.util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
/**
* <pre>
* Copy right information:
* Project:gene
* File Name:FileOperateUtil.java
* JDK version used:
* Commends:
*
*
* Modification history :
* date ver. author what is modified
* --------- ---- --------- ---------------------------
* 2013-12-14 1.0 Administrator new
* </pre>
*
* @author Administrator
* @version 1.0
*/
public class FileUploadUtil {
/**
* 文件真实名称
*/
public static final String REALNAME = "realName";
/**
* 文件修改后名称
*/
public static final String STORENAME = "storeName";
/**
* 文件大小
*/
public static final String SIZE = "size";
/**
* 文件后缀
*/
public static final String SUFFIX = "suffix";
/**
* 文件的mimeType
*/
public static final String CONTENTTYPE = "contentType";
/**
* 创建时间
*/
public static final String CREATETIME = "createTime";
/**
* 文件路径
*/
public static final String FILEPATH = "filePath";
/**
* 将上传的文件进行重命名
*
* make by Administrator on 2013-12-14 上午10:59:54
* @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;
}
/**
* 获得日期yyyyMMddHHmmss随机名称
*
* make by Administrator on 2014-4-15 上午10:43:30
* @return
*/
public static String rename() {
Long now = Long.parseLong(new SimpleDateFormat("yyyyMMddHHmmss")
.format(new Date()));
Long random = (long) (Math.random() * now);
String fileName = now + "" + random;
return fileName;
}
/**
* 压缩后的文件名
* demo.xml = demo.zip
* make by Administrator on 2013-12-14 上午10:59:46
* @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";
}
/**
* 获得文件后缀
*
* make by Administrator on 2013-12-14 下午02:14:01
* @param path
* @return
*/
private static String suffixName(String path){
String suffix = "";
if(path.lastIndexOf(".")!= -1){
suffix = path.substring(path.lastIndexOf(".")+1, path.length());
}
return suffix;
}
/**
* * 上传单个文件
*
* make by Administrator on 2013-12-14 下午03:11:07
* @param srcFile MultipartFile
* @param isZip 对上传文件是否进行压缩
* @param uploadDir 上传路径
* @return
* @throws Exception
*/
public static Map<String, Object> upload(MultipartFile srcFile,Boolean isZip,String uploadDir) throws Exception {
// 判断是否压缩
boolean isBlooZip = (isZip == null ? false : isZip);
File file = new File(uploadDir);
if (!file.exists()) {
file.mkdir();
}
String fileName = null;
// 判断上传文件大小为0不上传
if ("".equals(srcFile.getOriginalFilename()) && srcFile.getSize() == 0
&& srcFile.isEmpty() == true)
return null;
// 源文件名称
fileName = srcFile.getOriginalFilename();
// 修改后文件名称
String storeName = rename(fileName);
if(!uploadDir.endsWith(File.separator))
uploadDir+=File.separator;
// 文件上传路径
String noZipName = uploadDir + storeName;
if (isBlooZip) { // 压缩处理
String zipName = zipName(noZipName);
// 上传成为压缩文件
ZipOutputStream outputStream = new ZipOutputStream(
new BufferedOutputStream(new FileOutputStream(zipName)));
outputStream.putNextEntry(new ZipEntry(fileName));
outputStream.setEncoding("utf-8");
FileCopyUtils.copy(srcFile.getInputStream(), outputStream);
} else { // 不压缩
File uploadFile = new File(noZipName);
FileCopyUtils.copy(srcFile.getBytes(), uploadFile);
}
Map<String, Object> map = new HashMap<String, Object>();
// 固定参数值对
map.put(FileUploadUtil.REALNAME, isBlooZip ? zipName(fileName)
: fileName);
map.put(FileUploadUtil.STORENAME, isBlooZip ? zipName(storeName)
: storeName);
map.put(FileUploadUtil.FILEPATH, isBlooZip ? zipName(noZipName) : noZipName);
map.put(FileUploadUtil.SIZE, new File(isBlooZip ? zipName(noZipName)
: noZipName).length());
map.put(FileUploadUtil.SUFFIX,
suffixName(isBlooZip ? zipName(noZipName) : noZipName));
map.put(FileUploadUtil.CONTENTTYPE, srcFile.getContentType());
map.put(FileUploadUtil.CREATETIME, new Date());
return map;
}
/**
* * 上传文件
*
* make by Administrator on 2013-12-14 下午03:11:07
* @param request Request
* @param isZip 对上传文件是否进行压缩
* @param uploadDir 上传路径
* @return
* @throws Exception
*/
public static List<Map<String, Object>> upload(HttpServletRequest request,Boolean isZip,String uploadDir) throws Exception {
//判断是否压缩
boolean isBlooZip = (isZip==null?false:isZip);
List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
Map<String, MultipartFile> fileMap = mRequest.getFileMap();
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();
//判断上传文件大小为0不上传
if("".equals(mFile.getOriginalFilename()) && mFile.getSize()==0 && mFile.isEmpty()==true)continue;
//源文件名称
fileName = mFile.getOriginalFilename();
//修改后文件名称
String storeName = rename(fileName);
//文件上传路径
String noZipName = uploadDir + storeName;
if(isBlooZip){ //压缩处理
String zipName = zipName(noZipName);
// 上传成为压缩文件
ZipOutputStream outputStream = new ZipOutputStream(
new BufferedOutputStream(new FileOutputStream(zipName)));
outputStream.putNextEntry(new ZipEntry(fileName));
outputStream.setEncoding("utf-8");
FileCopyUtils.copy(mFile.getInputStream(), outputStream);
}else{ //不压缩
File uploadFile = new File(noZipName);
FileCopyUtils.copy(mFile.getBytes(), uploadFile);
}
Map<String, Object> map = new HashMap<String, Object>();
// 固定参数值对
map.put(FileUploadUtil.REALNAME, isBlooZip?zipName(fileName):fileName);
map.put(FileUploadUtil.STORENAME, isBlooZip?zipName(storeName):storeName);
map.put(FileUploadUtil.SIZE, new File(isBlooZip?zipName(noZipName):noZipName).length());
map.put(FileUploadUtil.SUFFIX, suffixName(isBlooZip?zipName(noZipName):noZipName));
map.put(FileUploadUtil.CONTENTTYPE, mFile.getContentType());
map.put(FileUploadUtil.CREATETIME, new Date());
map.put(FileUploadUtil.FILEPATH, isBlooZip ? zipName(noZipName) : noZipName);
result.add(map);
}
return result;
}
/**
* 文件下载
*
* make by Administrator on 2013-12-14 上午11:03:05
* @param request Request
* @param response Response
* @param filePath 文件修改后的名称+地址
* @param contentType 内容类型[application/octet-stream]
* @param realName 下载文件真实名称
* @throws Exception
*/
public static void download(HttpServletRequest request,
HttpServletResponse response, String filePath, String contentType,
String realName) throws Exception {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
long fileLength = new File(filePath).length();
response.setContentType(contentType);
response.setHeader("Content-disposition", "attachment; filename="
+ new String(realName.getBytes("gb2312"), "ISO8859-1"));
response.setHeader("Content-Length", String.valueOf(fileLength));
bis = new BufferedInputStream(new FileInputStream(filePath));
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
bis.close();
bos.close();
}
}
- 浏览: 19461 次
相关推荐
文件上传和下载是Web应用程序中的核心功能之一,无论是用户向服务器提交个人资料、分享文档,还是从服务器获取资源,如软件更新、电子书籍等,都离不开这一操作。在这个过程中,前端与后端的交互以及数据的安全传输...
在Java编程领域,文件上传和下载是Web应用中常见的功能,尤其在用户交互丰富的网站或系统中。本项目通过一个简单的源码实例,演示了如何实现在JSP(JavaServer Pages)界面上处理文本和图片的上传与下载,涵盖了相关...
无论是用户头像上传、文档管理还是多媒体资源分享等场景,都离不开文件的上传与下载操作。本文将详细介绍如何在Java Web应用中实现文件的上传和下载功能,并提供具体的代码示例。 #### 二、文件上传的基本原理 ...
文件上传和下载测试点总结 文件上传和下载是许多应用程序和网站的基本功能之一,在进行测试时需要考虑多个方面的测试点,以下是文件上传和下载的常见测试点: 下载测试点 1. 右键另存为是否可以正确下载文件,...
在本文中,我们将深入探讨如何使用Qt5.8框架通过FTP协议实现文件的上传和下载功能,同时结合进度条来实时展示操作进度。Qt是一个功能强大的C++库,提供了丰富的图形用户界面(GUI)工具和网络通信接口,使得开发者...
在Java Web开发中,JSP(JavaServer Pages)常常用于创建动态网页,配合Servlet处理用户交互,例如文件的上传和下载。本项目专注于解决在JSP中实现文件上传和下载时遇到的一些常见问题,特别是针对中文文件名的处理...
ssh下实现用户登陆 管理文件 文件的上传与下载
在PHP中,文件上传和下载是两个非常重要的功能,它们在Web开发中有着广泛的应用,例如用户上传头像、分享文件或下载资源等。本文将详细介绍如何使用PHP实现这两个功能。 首先,我们从文件上传开始。PHP提供了`$_...
在java代码中实现文件的上传和下载,通过页面的file文件上传到java代码段,获取文件的大小和名字
在JavaWeb开发中,文件上传和下载是常见的功能需求,特别是在构建交互性强的Web应用时。本源代码示例提供了一个简单的实现,帮助开发者理解如何处理这些操作。下面将详细解释涉及的技术点。 1. **文件上传** - **...
文件上传和下载是 J2EE 编程中一个古老而重要的话题,SSH 框架提供了一个简捷方便的文件上传下载的方案,通过一些配置和少量的代码就可以完好解决这个问题。 总体实现 上传文件保存到 T_FILE 表中,T_FILE 表结构...
在ASP文件上传和下载的场景中,开发者通常会利用ASP技术来实现用户通过Web界面上传文件到服务器,以及从服务器下载文件的功能。下面将详细阐述这个过程中的关键知识点。 一、文件上传 1. HTML表单:文件上传的第一...
另外,"上传下载实例"可能是包含示例代码的ASP文件,演示如何使用这两个组件进行实际操作。这些示例对于初学者来说非常宝贵,因为它们展示了如何在实际项目中集成和使用这些组件。同时,"详细说明文档"应提供了关于...
在Java Web开发中,文件上传和下载是常见的功能需求,特别是在构建交互性强的Web应用程序时。这个"javaweb文件上传与下载模块源代码"提供了一个实现这些功能的基础框架,对于初学者和Java程序员来说,这是一个很好的...
3. 断点续传:为了支持大文件下载和网络中断后的继续,服务器需要记录已下载的部分,并允许客户端通过HTTP的Range头请求特定范围的内容。 三、安全性 1. 验证:在接收文件上传前,应验证用户身份,防止恶意用户...
在.NET平台上进行文件上传和下载是常见的Web应用功能,它涉及到客户端与服务器之间的数据交互,以及数据的安全存储和访问控制。在这个项目中,开发者已经创建了一个包含数据库支持、开源实现的示例,不仅展示了文件...
综上所述,JSP实现图片和文件上传下载涉及到前端HTML表单、后端JSP或Servlet处理、文件存储管理、安全措施以及性能优化等多个环节。理解并熟练掌握这些知识点,能够帮助开发者构建稳定、安全、高效的文件上传下载...