JSP+Servlet实现上传下载
2016-07-08 10:51
288 查看
0.项目结构
1.在WebRoot下创建index.jsp页面
2.在src下的com.servlet包下创建UploadServlet.java文件
1.在WebRoot下创建index.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <form action="UploadServlet" enctype="multipart/form-data" method="post"> <p>姓名:<input type="text" name="user"/></p> <p>选择图片:<input type="file" name="nfile"/></p> <p><input type="submit" value="提交"/></p> </form> </body> </html>
2.在src下的com.servlet包下创建UploadServlet.java文件
package com.servlet; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Arrays; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadBase; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.乱码处理 request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8"); //创建输出流对象(负责在前台页面(写入)打印内容的) PrintWriter out=response.getWriter(); //2.得知请求中的数据是否包含二进制数据 boolean isMultipart=ServletFileUpload.isMultipartContent(request); //3.如果包含 if(isMultipart){ //3.1 创建封装表单数据的对象 DiskFileItemFactory factory=new DiskFileItemFactory(); //3.2 设置文件缓冲区大小4KB factory.setSizeThreshold(4096); //3.3 创建上传表单数据的对象 ServletFileUpload upload=new ServletFileUpload(factory); //3.4 设置上传单个文件的最大限制 upload.setSizeMax(1024*30); try { //3.5 解析请求中上传的表单数据,并将解析的内容的放入list集合 List<FileItem> filelist=upload.parseRequest(request); //3.6 循环存放表单数据的集合把普通字段和二进制字段取出来 for (FileItem f : filelist) { //3.6.1 如果是普通字段 if(f.isFormField()){ //(1)获取普通字段的name属性值:user String normalFiled=f.getFieldName(); //(2)判断如果name属性值是想要的就取对应值 if(normalFiled.equals("user")){ //输出name属性所对应的value值 out.print(f.getString("UTF-8")+"上传了文件!<br/>"); } }else{ //3.6.2 如果是二进制文件字段 //(1)获取上传的文件名 String uploadFileName=f.getName(); //(2)通过Arrays的aslist方法创建固定的集合,规定的文件格式 List<String> fileType=Arrays.asList("gif","bmp","jpg","png"); //(3)返回文件的后缀 String ext=uploadFileName.substring(uploadFileName.lastIndexOf(".")+1); //(4)判断文件类型是否允许在制定范围 if(fileType.contains(ext)){ //(4.1)判断如果文件名不为空,将数值取出 if(uploadFileName!=null && !uploadFileName.equals("")){ //(4.1.1)获取上传的文件路径 String uploadFilePath= request.getSession().getServletContext().getRealPath("upload/"); //拼接路径:第一个参数是文件夹,第二个参数是文件名 File saveFile=new File(uploadFilePath,f.getName()); //(4.1.2)上传到服务器 f.write(saveFile); out.print("上传成功后的文件名是:"+uploadFileName+",文件大小是:"+f.getSize()+"bytes!<br/>"); out.print("上传的文件夹路径:"+uploadFilePath+"<br/>"); out.print("上传的文件全路径:"+saveFile.getAbsolutePath()+"<br/>"); }else{ out.print("二进制文件名为空!"); } }else{ out.print("文件上传失败!,文件类型只能是gif.bmp,jpg,png"); } } } } catch (FileUploadBase.SizeLimitExceededException e) { out.print("文件上传失败,文件太大,单个文件的最大限制是:"+upload.getSizeMax()+"bytes!!") ; e.printStackTrace(); } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ //4.不包含 out.print("表单中不包含二进制数据!"); } } }
相关文章推荐
- JS选取DOM元素的简单方法
- href="#" href="javascript:void(0);" href="###"
- js中替换字符串
- js常用正则表达式
- table根据表格内的元素改变行颜色的javascript实现
- md5.js 插件
- Jsp c标签数值格式化
- [置顶] CraftyJs初探
- EXTJs前后台交互 常用哦3种方式
- js事件执行顺序
- CSS+JS滚动图片功能代码
- JS代码的简单重构与优化
- JSHint、SublimeLinter插件安装
- 15 Interesting JavaScript and CSS Libraries for June 2016
- Augularjs-起步详解
- JsonHelper操作帮助类
- Javascript 严格模式详解
- Jackson之Tree Model读取以及更新Json
- js解析XML
- [Effective JavaScript 笔记]第59条:避免过度的强制转换