servlet实现文件上传与下载功能
/**
* 需要解决的问题:
* 1 必须要把文件存放到WEB-INF目录下,避免用户看到
* 2 文件名相关问题
* 1 有的浏览器会传递绝对路径到name中,我们只需要进行拆分即可
* 2文件重名问题,我们可以使用uuid
* 3文件名乱码问题,我们已经解决了。即request.setCharacterEncoding("utf-8");
* 3 文件打散问题
* 1通过首字符打散
* 2通过时间打散
* 3通过hash打散
* 4上传文件大小限制
* 1单个文件上传大小限制
* 2总文件上传大小限制
* 设置这两个参数时,我们必须在没有解析之前执行。
* 5 缓存大小与临时目录
*
*
*
**/
public class FileUploadServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
/**
* 我们使用commmons的小工具来进行编码
* 设置jsp页面的enctype= “multipart/form-data“;
* 1 创建FileItem工厂
* 2创建ServletFileUpload对象
* 3 解析request得到FileItem
* 4对FileItem进行操作
**/
String path = request.getSession().getServletContext().getRealPath("/WEB-INF");
//解决缓存大小,要不然你的内存会爆的。
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(1024 * 10,new File(path + "/" + "tmp2") );
ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);
List
try {
l = fileUpload.parseRequest(request);
FileItem f2 = l.get(0);
//解决文件存放在WEN_INF目录下问题
path = path + "/tmp";
//解决浏览器传递绝对路径问题
String name = f2.getName();
int i = name.lastIndexOf("/");
if(i != -1) {
name = name.substring(i);
}
//解决文件重名问题
name = (UUID.randomUUID().toString().replace("-","").trim()) + name;
//文件打散问题解决方法演示之hash打散
int has = name.hashCode();
//转换位16进制位,我们使用前两个值来判断
String hex = Integer.toHexString(has);
path = path + "/" + hex.charAt(0) + "/" + hex.charAt(2) ;
File file = new File(path);
if(! file.exists()) {
file.mkdirs();
}
f2.write(new File(path + "/" + name));
request.setAttribute("msg","恭喜你,上传成功了!");
request.getRequestDispatcher("/index.jsp").forward(request, response);
} catch (Exception e) {
request.setAttribute("msg",e.getMessage());
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
}
}
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播
相关文章
- Android ActivityManagerService启动流程详解
- Servlet文件的上传与下载详解
- servlet实现文件上传与下载功能
- APMServ一键快速搭建Apache+PHP+MySQL+Nginx+Memcached+ASP运行平台教程
- Android Service开发应用实例
- C#创建WebService接口并连接的全过程
- SQL Server数据表模糊查询(like用法)以及查询函数详解
- Sql Server 2008 精简版(Express)+Management Studio Express第一次安装使用图文教程
- Services.exe是什么进程?Services.exe病毒吗?Services.exe占CPU情况
- sqlserver2005 安装图解教程以及SQL 2005 SP3补丁安装图文教程