zoukankan      html  css  js  c++  java
  • 【Servlet3.0新特性】第03节_文件上传

    这是一个Web Project


    首先是web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    	<!-- Servlet3.0需要Tomcat7和JavaEE6,配置方法详见 -->
    	<!-- http://blog.csdn.net/jadyer/article/details/9164655 -->
    	<!-- http://blog.csdn.net/jadyer/article/details/9164737 -->
    	<welcome-file-list>
    		<welcome-file>index.jsp</welcome-file>
    	</welcome-file-list>
    </web-app>

    下面是表单输入页index.jsp

    <%@ page language="java" pageEncoding="UTF-8"%>
    <form action="<%=request.getContextPath()%>/upload" method="POST" enctype="multipart/form-data">
    	<input name="uploadFile" type="file"><br/>
    	<input type="submit">
    <form>


    最后是用于处理文件上传的HelloServlet.java

    package com.jadyer.servlet;
    
    import java.io.File;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.MultipartConfig;
    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;
    
    /**
     * Servlet3.0新特性之便利的文件上传
     * @see ------------------------------------------------------------------------------------------------------------------
     * @see 注意要使用@MultipartConfig注解标明此Servlet支持文件上传
     * @see 否则获取到的javax.servlet.http.Part就是空的,Part.getXxx()就会报告NullPointerException
     * @see ------------------------------------------------------------------------------------------------------------------
     * @see 关于@MultipartConfig的几个属性
     * @see location--->指定存储所上传文件的目录....分以下两种情况
     * @see             1)若part.write(fileName)传的参数只有上传的文件名,那么最后文件就会被上传到location目录中
     * @see               若此时location所指定的目录不存在,则会报告下面的异常(Tomcat7.x启动时不会报)
     * @see               java.io.IOException: The temporary upload location [D:\upload22] is not valid
     * @see             2)若part.write(savePath+"/"+fileName),则无论location是否指定目录,最后文件都会被上传到savePath
     * @see               但是,如果此时location所指定的目录不存在,那么也会报告第一种情况中的异常,并导致上传文件失败
     * @see             总结:API说location是储存文件的目录,但根据上面两种情况,我感觉location指的是临时文件目录,故不推荐使用
     * @see             总结:随后我又查看了Oracle官方文档,发现该属性指的就是临时文件目录
     * @see             总结:其官方文档的地址为http://docs.oracle.com/javaee/6/tutorial/doc/gmhal.html
     * @see fileSizeThreshold-->设置阈值,达到阈值后会将所上传的文件从临时目录中写到磁盘..单位为byte,默认值是0
     * @see maxFileSize-------->允许上传的单个文件最大值,即不限制文件总数及总大小,只限制单个文件..单位为byte,默认值是-1,即无限制
     * @see maxRequestSize----->允许上传的文件的最大值,这里指的是一次性上传的所有文件的合计大小..单位也是byte,默认值是-1,即无限制
     * @see ------------------------------------------------------------------------------------------------------------------
     * @create Jun 24, 2013 3:19:12 PM
     * @author 玄玉<http://blog.csdn.net/jadyer>
     */
    @WebServlet(urlPatterns="/upload")
    @MultipartConfig(fileSizeThreshold=1024*1024*2, maxFileSize=1024*1024*20, maxRequestSize=1024*1024*200)
    public class HelloServlet extends HttpServlet {
    	private static final long serialVersionUID = -1812698941752545746L;
    
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		//解决上传文件的中文乱码问题
    		req.setCharacterEncoding("UTF-8");
    		//解决应答给浏览器的中文乱码问题
    		resp.setCharacterEncoding("UTF-8");
    		
    		//回显上传结果给浏览器
    		String uploadResult = null;
    		PrintWriter out = resp.getWriter();
    		resp.setContentType("text/html; charset=UTF-8");
    		try{
    			//获取上传的文件的Part,下面的操作都是以这个Part为中心的
    			Part part = req.getPart("uploadFile");
    			
    			//本例中它的值是form-data; name="uploadFile"; filename="玄玉.png"
    			String _str = part.getHeader("content-disposition");
    			//获取上传的文件真实名字(含后缀)
    			String fileName = _str.substring(_str.lastIndexOf("=")+2, _str.lastIndexOf("""));
    			
    			//指定上传的文件的存储目录并确保其存在
    			String savePath = "D:/upload/";
    			File savePathFolder = new File(savePath);
    			if(!savePathFolder.exists()){
    				savePathFolder.mkdirs();
    			}
    			//上传文件(写入磁盘)
    			part.write(savePath + "/" + fileName);
    			uploadResult = "上传完毕<br/>上传的文件Part=" + part.getName() + "<br/>上传的文件名称=" + fileName
    						 + "<br/>上传的文件大小=" + part.getSize() + "<br/>上传的文件类型=" + part.getContentType();
    		}catch(IllegalStateException ise){
    			uploadResult = "上传失败,失败原因如下<br/>" + ise.getMessage();
    		}
    		out.print(uploadResult);
    		out.flush();
    		out.close();
    	}
    }
  • 相关阅读:
    Windows 8实例教程系列 开篇
    qt 开发发布于 windeploy.exe
    qt qoci 测试验证
    vmware vmx 版本不兼容
    qt oracle
    vc qt dll
    QOCIDriver unable to create environment
    qoci 编译完 放置位置 具体根据情况
    calling 'lastError' with incomplete return type 'QSqlError' qsqlquer
    Hbase 操作工具类
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3155559.html
Copyright © 2011-2022 走看看