博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Servlet3.0新特性】第03节_文件上传
阅读量:7296 次
发布时间:2019-06-30

本文共 3615 字,大约阅读时间需要 12 分钟。

这是一个Web Project

 

首先是web.xml

 

index.jsp

 

下面是表单输入页index.jsp

 

<%@ page language="java" pageEncoding="UTF-8"%>

最后是用于处理文件上传的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:\\upload\22] 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 玄玉
*/@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 = "上传完毕
上传的文件Part=" + part.getName() + "
上传的文件名称=" + fileName + "
上传的文件大小=" + part.getSize() + "
上传的文件类型=" + part.getContentType(); }catch(IllegalStateException ise){ uploadResult = "上传失败,失败原因如下
" + ise.getMessage(); } out.print(uploadResult); out.flush(); out.close(); }}
你可能感兴趣的文章
得到输入内容的首字母
查看>>
sklearn特征选择和分类模型
查看>>
hadoop搭建与eclipse开发环境设置
查看>>
三:简单工厂模式
查看>>
#51CTO学院四周年#其实、其实,我就是来吐槽的”
查看>>
java 三种将list转换为map的方法详解
查看>>
iOS开发系列--让你的应用“动”起来
查看>>
Web项目中文件上传Filter处理
查看>>
Gradle常用配置
查看>>
LVM 使用详解
查看>>
驰骋工作流程底层的API开发接口-重要的
查看>>
如何防止无线网络被破解
查看>>
苹果发布被拒绝的种种惨剧
查看>>
Install Apache in Linux
查看>>
安装CocoaPods
查看>>
websocketd 实现浏览器查看服务器实时日志
查看>>
SVN服务器与客户端的配置
查看>>
HBase图文详解
查看>>
自定义FragmentTabHost实现可控制是否保存fragment状态
查看>>
Java并发编程之:Vector和ArrayList的区别
查看>>