jsp上传文件案例(有源码)
来源:互联网 发布:gis基础软件平台 编辑:程序博客网 时间:2024/06/07 11:49
前言
这两天做上传的功能,趁着端午节的时间在家里做了一个上传的案例。今天写个博客记录一下!说明: 1.项目使用myeclipse开发工具 2.项目的源码的压缩格式是7z,可以下载一个7z压缩工具解压
知识点一:准备工作
1.需要引入jar包---这里使用了apache的包 commons-fileupload-1.2.2.jar commons-io-2.0.1.jar 2.前台使用的js文件---我使用的是ajax提交的表单 jquery-3.2.1.js jquery.form.js
知识点二:项目中的知识点:
1. java操作文件知识2. java流相关知识3. ajax提交表单4. servlet知识5. filter知识
前台页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML ><html> <head> <base href="<%=basePath%>"> <!-- html 5 的编码设置方式 --> <meta charset="UTF-8"> <title>上传demo</title> <script type="text/javascript" src="static/js/jquery-3.2.1.js"></script> <script type="text/javascript" src="http://malsup.github.io/jquery.form.js"></script> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> <script type="text/javascript"> $(function(){ //给 “使用ajax上传” 按钮绑定点击事件 $("#uploadButton").on("click",function(){ $("#uploatForm").ajaxSubmit({ beforeSubmit:function(){//提交前调用 //alert('准备提交表单了'); }, success:function(data){//成功调用 //alert("提交成功了"); if(typeof(data) == "string"){ data = eval('(' + data + ')');;//将返回的json字符串转换为json对象 alert(data.message); } } }); }); }); </script> </head> <body> <br> <br> <form action="upload" method="post" id="uploatForm" enctype="multipart/form-data"> <input type="file" name="upload" /><span style="color:red;font-size:13px">不能超过4M</span> <br> <input type="submit" value="上传(请使用下面的ajax上传---同步上传也可以使用)" disabled="disabled"/> <br> <input type="button" value="使用ajax上传" id="uploadButton" > </form> </body></html>
后台代码:
一、servlet代码:
package cn.cupcat.controller;import java.io.File;import java.io.IOException;import java.sql.Timestamp;import java.text.SimpleDateFormat;import java.util.Iterator;import java.util.List;import java.util.UUID;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.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import cn.cupcat.util.UploadUtil;public class UploadController extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; public static String uploadPath = "D:\\upload"; File repository; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("我进入了post方法!"); //返回客户端消息 String resultMessage = ""; DiskFileItemFactory fileFactory = new DiskFileItemFactory(); //设置缓冲区大小 这里是4KB (单位是B 字节) fileFactory.setSizeThreshold(4096); //设置缓存 fileFactory.setRepository(repository); ServletFileUpload servletFileUpload = new ServletFileUpload(fileFactory); //设置文件上传的大小这里是4M servletFileUpload.setFileSizeMax(4194304); try { //得到上传文件列表 List<FileItem> fileItem = servletFileUpload.parseRequest(request); Iterator<FileItem> iterator = fileItem.iterator(); //得到保存路径 File saveDir = UploadUtil.getSavePath(request); while(iterator.hasNext()){ FileItem file = iterator.next(); if(file != null){ String fileName = file.getName(); if(fileName != null){ //System.out.println("上传文件的没有转码的文件名为:"+fileName); //构建本地文件 File saveFile = new File(saveDir,UploadUtil.getSaveFileName(fileName)); file.write(saveFile); resultMessage = UploadUtil.getResponseResult(200, "上传成功!"); }else{ System.out.println("上传失败!"); resultMessage = UploadUtil.getResponseResult(300, "请选择上传文件,上传失败!"); } } } System.out.println("文件上传结束 !"); } catch (FileUploadException e) { resultMessage = UploadUtil.getResponseResult(300, "文件上传错误,上传失败!"); e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); resultMessage = UploadUtil.getResponseResult(300, "文件上传错误,上传失败!"); } response.getWriter().print(resultMessage);//返回客户端 resultMessage } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req, resp); }}
二、filter代码:—主要作用是设置编码
package cn.cupcat.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class UnicodeFilter implements Filter{ @Override public void destroy() { } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { if(arg0 instanceof HttpServletRequest){ System.out.println("进入了过滤器"); HttpServletRequest request = (HttpServletRequest)arg0; request.setCharacterEncoding("UTF-8"); //设置编码,防止后台得到中文乱码 } if (arg1 instanceof HttpServletResponse){ HttpServletResponse response = (HttpServletResponse)arg1; response.setCharacterEncoding("UTF-8");//设置编码,防止返回客户端乱码 } arg2.doFilter(arg0, arg1); } @Override public void init(FilterConfig arg0) throws ServletException { }}
工具类:
package cn.cupcat.util;import java.io.File;import java.sql.Timestamp;import java.text.SimpleDateFormat;import java.util.UUID;import javax.servlet.http.HttpServletRequest;public class UploadUtil { // 产生32位UUID public static String getUUID32() { return UUID.randomUUID().toString().replace("-", ""); } // 获得服务器存储文件名,格式为: 32位UUID+"_"+ fileName public static String getSaveFileName(String fileName) { if (fileName != null && fileName.length() > 0) return getUUID32() + "_" + fileName; return ""; } // 获得上传保存路径 -----这里是模拟的 public static File getSavePath(HttpServletRequest request) { String date = formatDate(new Timestamp(System.currentTimeMillis()), "yyyyMMdd");// 当前日期 String moduls = "upload";// 模块名(这里假设模块名为:upload) String username = "A12346579";// 用户名(这里模拟用户名为:A12346579) String relativePath = File.separatorChar + "WEB-INF" + File.separatorChar + "attachment" + File.separatorChar + moduls + File.separatorChar + username + File.separatorChar + date; // String absolutePath = request.getSession().getServletContext() .getRealPath(relativePath); File dir = new File(absolutePath); if (!dir.exists())// 如果文件家不存在,就创建 dir.mkdirs(); return dir; } // 格式化时间 public static String formatDate(Timestamp timestamp, String format) { return new SimpleDateFormat(format).format(timestamp); } //这里为了简单,没有引入处理json的包,这是模拟json数据 public static String getResponseResult(int status,String message){ return "{status: "+status+",message: '"+message+"'}"; }}
web.xml文件代码:
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>upload_demo</display-name><!-- 上传servlet开始 --> <servlet> <servlet-name>upload</servlet-name> <servlet-class>cn.cupcat.controller.UploadController</servlet-class> </servlet> <servlet-mapping> <servlet-name>upload</servlet-name> <url-pattern>/upload</url-pattern> </servlet-mapping> <!-- 上传servlet结束 --> <filter> <filter-name>unicode</filter-name> <filter-class>cn.cupcat.filter.UnicodeFilter</filter-class> </filter> <filter-mapping> <filter-name>unicode</filter-name> <!-- 这里指定filter只对servlet的name为upload生效 --> <servlet-name>upload</servlet-name> </filter-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list></web-app>
知识点三:项目中的注意点:
1.项目中为了简单,没有使用json的工具类,而是而是自己写的字符串返回客户端2.项目中上传文章的存放路径问题,请看UploadUtil.java中的方法
知识点四:文件的源码
文件的下载地址:http://download.csdn.net/detail/xinghuo0007/9855550
说明:如果有什么不足的地方,大家可以一起交流!
阅读全文
0 0
- jsp上传文件案例(有源码)
- 文件上传案例(1)
- jsp文档上传案例
- JSP+Servlet实现文件上传及下载案例
- jsp文件上传源码,不限制上传大小,速度一流
- 支持断点上传文件的演示(C#)有图、有源码
- jsp上传文件(简单)
- 文件上传(JSP+android)
- jsp文件上传(图片上传)
- 有进度条的java,action,servlet,jsp大文件上传
- 文件上传,图片上传案例
- java-文件上传案例
- 迷你上传文件案例
- TCP文件上传案例
- 案例--文件上传总结
- 文件上传案例
- formData文件上传--案例
- 文件上传案例
- 怎样在本地搭建IIS服务器
- 关于JSON与对象集合的简单转换
- hadoop实现的一个简单的Pagerank例子
- 坐标轴范围设定
- 数十种TensorFlow实现案例汇集:代码+笔记
- jsp上传文件案例(有源码)
- JS中的真与假
- 拉格朗日插值法 C语言实现
- 导入低版本的WEB项目需要修改的地方
- python3使用Scrapy
- windows下彻底卸载MySQL的方法
- 代理模式
- 机器学习经典算法优缺点总结
- IC设计完整流程及工具简述