Servlet、commons-fileupload等方法上传图片到项目制定目录的方法总结
2016-08-04 15:13
447 查看
图片上传,文件上传是web开发必备的技能,大有用处,不可小觑,设计到相关I/O流,以及对Servlet容器等知识原理的掌握,目前常用的方式大概有以下几种:
Servlet3.0对文件上传的支持
commons-fileupload.jar
smartupload.jar
struts2实现文件上传
下面贴上实现的几种方式,陆续完善,所有方式公用一个文件上传表单文件upload.jsp
Servlet3.0实现文件上传
当需要普通表单域数据时可以通过req.getParameter("XXX")来获得,到时只能接收英文和数字,中文字符并不能解析,字符编码转码并不能用!
commons-fileupload实现文件上传
Servlet3.0对文件上传的支持
commons-fileupload.jar
smartupload.jar
struts2实现文件上传
下面贴上实现的几种方式,陆续完善,所有方式公用一个文件上传表单文件upload.jsp
Servlet3.0实现文件上传
当需要普通表单域数据时可以通过req.getParameter("XXX")来获得,到时只能接收英文和数字,中文字符并不能解析,字符编码转码并不能用!
My JSP 'upload.jsp' starting page select:
package com.bookstore.action; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; import java.util.List; import javax.annotation.Resource; import javax.imageio.ImageIO; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebInitParam; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.Part; import org.apache.catalina.Context; import org.apache.catalina.core.ApplicationPart; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import com.bookstore.entity.Book; import com.bookstore.entity.Category; @WebServlet("/UpLoadServlet") @MultipartConfig() public class UpLoadServlet extends HttpServlet{ private static final long serialVersionUID = 2687272335062029603L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 对请求包设置编码 req.setCharacterEncoding("utf-8"); // 告知tomcat如何编码,浏览器如何解码 resp.setContentType("text/html; charset=utf-8"); //获得项目的根目录 String savePath=getServletContext().getRealPath("/image"); // 为了简单,后面也直接就以fileName作为保存文件的名称 SimpleDateFormat dateFormat=new SimpleDateFormat("yyMMddHHmmss"); String fileName=dateFormat.format(new Date())+".jpg"; Part part = req.getPart("file"); System.out.println(part.getContentType()); System.out.println(part.getSize()); Collection headerNames = part.getHeaderNames(); // 遍历文件上传域的Header Name for (String headerName : headerNames) { System.out.println(headerName + "---->" + part.getHeader(headerName)); } // 将文件保存到项目下的uploads文件夹下,为了简单这里没写判断目录是否存在及创建目录的操作,要先确保该目录已经存在 part.write(savePath + "/" + fileName); } }
commons-fileupload实现文件上传
@WebServlet(urlPatterns="/UploadServlet", initParams={@WebInitParam(name="filePath",value="/image"),@WebInitParam(name="tempPath",value="/temp")}) public class UploadServlet extends HttpServlet{ private static final long serialVersionUID = 2687272335062029603L; private String filePath; //文件保存路径 private String tempPath; //文件临时目录 @Override public void init(ServletConfig config) throws ServletException { super.init(config); //config 不但可以读取web.xml文件的初始值,也可以读取注解中的初始化参数,并复制给filePath、tempPath成员属性 filePath=config.getInitParameter("filePath"); tempPath=config.getInitParameter("filePath"); //servlet上下文,servlet运行环境,对象,容器,application //获得绝对路径 ServletContext context = getServletContext(); filePath = context.getRealPath(filePath); tempPath = context.getRealPath(tempPath); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 对请求包设置编码 req.setCharacterEncoding("utf-8"); // 告知tomcat如何编码,浏览器如何解码 resp.setContentType("text/html; charset=utf-8"); //文件保存路径 File saveDir = new File(filePath); // 如果目录不存在,就创建目录 if(!saveDir.exists()){ saveDir.mkdir(); } // 创建文件上传核心类 DiskFileItemFactory factory = new DiskFileItemFactory(); // thrshold: 极限,临界值,表示磁盘缓存 1k factory.setSizeThreshold(1*1024); // repository: 储存室,即临时文件目录 factory.setRepository(new File(tempPath)); ServletFileUpload sfu = new ServletFileUpload(factory); //设置编码 sfu.setHeaderEncoding("UTF-8"); // 设置上传的单个文件的最大字节数为2M sfu.setFileSizeMax(1024*1024*2); //设置整个表单的最大字节数为10M sfu.setSizeMax(1024*1024*10); try{ // 处理表单请求 List itemList = sfu.parseRequest(req); for (FileItem fileItem : itemList) { // 对应表单中的控件的name String fieldName = fileItem.getFieldName(); System.out.println("name名称:" + fieldName); // 如果是普通表单控件 if(fileItem.isFormField()){ String value = fileItem.getString(); //重新编码,解决乱码 value = new String(value.getBytes("ISO-8859-1"),"UTF-8"); System.out.println("普通内容:" + fieldName + "=" + value); // 上传文件 }else{ // 获得文件大小 Long size = fileItem.getSize(); // 获得文件名 String fileName = fileItem.getName(); System.out.println("文件名:"+fileName+"\t大小:" + size + "byte"); //设置不允许上传的文件格式 if(fileName.endsWith(".exe")){ System.out.println("不支持的文件上传类型"); }else{ //将文件保存到指定的路径 File file = new File(filePath,fileName); fileItem.write(file); System.out.println("上传成功"); } } } }catch(FileSizeLimitExceededException e){ req.setAttribute("msg", "文件太大"); }catch(FileUploadException e){ e.printStackTrace(); }catch(Exception e){ e.printStackTrace(); } } }
相关文章推荐
- SpringMVC上传图片总结(1)-Web Uploader--常规方法进行图片上传,使用了MultipartFile、MultipartHttpServletRequest
- java通过commons-fileupload实现多张图片的上传(servlet)
- SpringMVC上传图片总结(1)---常规方法进行图片上传,使用了MultipartFile、MultipartHttpServletRequest
- servlet中使用commons-fileupload实现图片上传
- SpringMVC上传图片总结(1)---常规方法进行图片上传,使用了MultipartFile、MultipartHttpServletRequest
- SpringMVC上传图片总结(1)---常规方法进行图片上传,使用了MultipartFile、MultipartHttpServletRequest
- SpringMVC上传图片总结(1)---常规方法进行图片上传,使用了MultipartFile、MultipartHttpServletRequest
- java上传组件commons-fileupload的一些使用方法
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- php 异步上传图片几种方法总结
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- Servlet上传文件,commons-fileupload
- 利用commons-fileupload 上传图片(包含表单数据)
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结
- commons-fileupload组件上传图片介绍