Jsp 使用 fileupload 文件上传和下载
来源:互联网 发布:英雄联盟网吧特权软件 编辑:程序博客网 时间:2024/05/22 18:22
前言
Jsp文件上传的目前主要有两个常用的:
1、SmartUpload
2、Apache Commons fileupload
我在期末的 Jsp 大作业需要一个文件上传下载模块,使用了第2个 Apache 的包,这里我主要写写文件上传和下载的普通用法、注意的问题、最重要的是 表单的文本和文件一块提交的写法。
文件上传
第一步、我们应该引入2个包:
commons-fileupload-1.2.1.jarcommons-io-1.4.jar
注:这两个 jar 包配合使用,都需要引入,文末会附上下载链接。此外,这应该不是最新版,有强迫症的同学可以去 apache 看看。
第二步、放上 index.jsp 的表单:
//略过非重点... <form method="post" action="/classhelp/UploadServlet" enctype="multipart/form-data"> <input type="file" name="uploadFile" /> <input name="stuid" type="hidden" value="<%=studentid%>"> <input name="workid" type="hidden" value="<%=workid%>"> <input class="filesubmit" type="submit" value="上传作业" /> </form>
我们可以看到:
form 的 method 是 post 的;
form 的内容格式要定义为 multipart/form-data 格式;
form 的 文件input 的 type 是 file;
对,这三条是必须的!当然这里表单还有stuid和workid。
第三步、UploadServlet 代码
@WebServlet("/UploadServlet") public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; private String filePath; // 文件存放目录 private String tempPath; // 临时文件目录 private String studentid; private String workid; private String filename ; private String SQLFileName; // 初始化 public void init(ServletConfig config) throws ServletException { super.init(config); // 可以从配置文件中获得初始化参数 //filePath = config.getInitParameter("filepath"); //tempPath = config.getInitParameter("temppath"); //ServletContext context = getServletContext(); //filePath = context.getRealPath(filePath); //tempPath = context.getRealPath(tempPath); filePath="D:/ClassHelpFile/file"; tempPath="D:/ClassHelpFile/temp"; } // doPost public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { //res.setContentType("text/plain;charset=gbk"); PrintWriter pw = res.getWriter(); try { DiskFileItemFactory diskFactory = new DiskFileItemFactory(); // threshold 极限、临界值,即硬盘缓存 1M diskFactory.setSizeThreshold(10 * 1024); // repository 贮藏室,即临时文件目录 diskFactory.setRepository(new File(tempPath)); ServletFileUpload upload = new ServletFileUpload(diskFactory); //防止乱码 upload.setHeaderEncoding("UTF-8"); // 设置允许上传的最大文件大小 4M upload.setSizeMax(10 * 1024 * 1024); // 解析HTTP请求消息头 List<FileItem> fileItems = upload.parseRequest(req); Iterator<FileItem> iter = fileItems.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { processFormField(item, pw);//处理表单内容 } else { processUploadFile(item, pw);//处理上传的文件 } } SQLFileName=tempPath+"/"+filename; System.out.println(workid+" & "+studentid+" & "+SQLFileName); //保存到数据库 String sql = "insert into finishwork(workid,studentid,fileurl) values('"+workid+"','"+studentid+"','"+SQLFileName+"')"; Connection conn = DBbean.getConn(); Statement stmt = DBbean.getStatement(conn); DBbean.getResultSetOfInsert(stmt, sql); DBbean.close(stmt); DBbean.close(conn); pw.close(); } catch (Exception e) { System.out.println("异常:使用 fileupload 包发生异常!"); e.printStackTrace(); } RequestDispatcher rd =req.getRequestDispatcher("/student/index_student.jsp?id="+studentid); try{ rd.forward(req, res); return; }catch(Exception e){ System.out.print(e.toString()); } return; } // 处理表单内容 private void processFormField(FileItem item, PrintWriter pw) throws Exception { String name = item.getFieldName(); if(name.equals("stuid")){ studentid = item.getString(); }else if(name.equals("workid")){ workid = item.getString(); } } // 处理上传的文件 private void processUploadFile(FileItem item, PrintWriter pw) throws Exception { filename = item.getName(); int index = filename.lastIndexOf("\\"); filename = filename.substring(index + 1, filename.length()); long fileSize = item.getSize(); if ("".equals(filename) && fileSize == 0) { System.out.println("文件名为空 !"); return; } File uploadFile = new File(filePath + "/" + filename); item.write(uploadFile); //pw.println(filename + " 文件保存完毕 !"); //pw.println("文件大小为 :" + fileSize + "\r\n"); } // doGet public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException { //doPost(req, res); }}
上述代码注释很详尽,其中,我们可以清楚的看到,处理表单普通内容的 processFormField 方法和处理上传的文件的 processUploadFile方法。特别注意 processFormField 方法,需要根据 form 表单的 name 来获取内容。
这样我们可以把表单的普通文本和文件一块提交啦!
文件下载
表单就不放了,直接来 DownloadServlet:
/** * 文件下载 * @author GUOFENG * */public class DownloadServlet extends HttpServlet { private static final long serialVersionUID = 1L; private String path; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取传送的文件路径 path = request.getParameter("fileurl"); if (path != null) { download(response); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public void download(HttpServletResponse response) throws IOException { //去掉路径,剩下文件名。 String realPath = path.substring(path.lastIndexOf("/") + 1); // 告诉浏览器是以下载的方法获取到资源,以此种编码来解析。 response.setHeader("content-disposition", "attachment; filename=" + URLEncoder.encode(realPath, "utf-8")); // 获取资源,保存。 FileInputStream fis = new FileInputStream(path); int len = 0; byte[] buf = new byte[1024]; while ((len = fis.read(buf)) != -1) { response.getOutputStream().write(buf, 0, len); } fis.close(); }}
这里传入了文件路径,获取文件进行保存。
下载jar包
点我下载
0 0
- Jsp 使用 fileupload 文件上传和下载
- java使用FileUpload实现文件的上传和下载
- JSP使用commons-fileupload实现文件上传
- Jsp 使用commons-fileupload实现文件上传
- 使用fileupload上传文件,并提供下载
- Jsp上传文件(FileUpload+Servlet)
- 使用FileUpload上传文件
- 使用FileUpload上传文件
- jsp 文件上传和下载
- commons-fileupload文件上传、下载
- commons-fileupload文件上传、下载
- javaweb 文件上传(fileupload) 下载
- javaweb 文件上传(fileupload) 下载
- FileUpload框架实现文件上传(多个文件)和下载
- 在jsp/servlet中使用apache FileUpload组件文件上传(jsp,servlet,fileupload)
- JSP Servlet学习笔记——使用fileupload上传文件
- JSP Servlet学习笔记——使用fileupload上传文件
- JSP Servlet学习笔记——使用fileupload上传文件
- Dynamics CRM2016 Web Api之分页查询
- <c:forEach> 标签的var 属性和varStatus属性的区别
- HDU 1008 Elevator 水题
- 【一点一点写算法】排序算法开头
- 学习笔记之--JAVA IO流
- Jsp 使用 fileupload 文件上传和下载
- BZOJ4720——[Noip2016]换教室
- JavaBean与Expression Language
- SQLite所遇到的坑
- 总结62
- C++从入门到放弃
- 剑指offer——面试题24:二叉搜索树的后序遍历序列
- KVM 虚拟化原理探究— overview
- 删除字符串中相同的元素