文档章节

Servlet处理文件上传

奔跑的码农
 奔跑的码农
发布于 2016/07/21 09:08
字数 547
阅读 118
收藏 4

网页端:

<form method="post" action="upload"  enctype="multipart/form-data">
名称:<input type="text" name="name"><br/>
年龄:<input type="text" name="age"><br/>
上传:<input type="file" name="file"><br/>
<input type="reset" value="取消">
<input type="submit" value="提交">
</form>

Servlet:

package wodeschool.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Iterator;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;

public class UploadServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request,HttpServletResponse response)
	throws ServletException,IOException
	{
		request.setCharacterEncoding("UTF-8");//设置请求数据的编码方式
		process(request,response);//文件的处理
	}

	private void process(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		response.setContentType("text/html;charset=UTF-8");

		String name=request.getParameter("name");//获取普通数据name和age
		String age=request.getParameter("age");
		response.getWriter().write("<strong>name:"+name+"<br/>age:"+age+"</strong>"+"<br/>");
		Part part=request.getPart("file");//getPart()用于上传单文件,getParts()用于上传多个文件。

		saveUpload(part);//文件保存
		response.getWriter().write("<h3>文件上传成功</h3>");
	}

	private void saveUpload(Part part) {
		// TODO Auto-generated method stub
		String fileName=getFileName(part);//获取文件名
		fileName="school_"+System.nanoTime()+"_"+fileName;//防止文件重名
		
		ServletContext cxt=getServletContext();
		String realPath= cxt.getRealPath("/");//得到当前路径
		File file=new File(realPath+"upload");
		if(!file.exists()){
			file.mkdir();
		}
		File upFile=new File(file,fileName);
		FileOutputStream fos=null;
		InputStream is=null;
		byte[] buf=new byte[1024];
		int flag=-1;
		try {
			fos=new FileOutputStream(upFile);
			is=part.getInputStream();
			while((flag=is.read(buf,0,1024))!=-1)
			{
				fos.write(buf, 0, flag);
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch(IOException e)
		{
			e.printStackTrace();
		}
		finally
		{
			if(fos!=null){
				try {
					fos.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(is!=null){
				try {
					is.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

	private String getFileName(Part part) {

		String header= part.getHeader("content-disposition");
		String[] arr=header.split("filename=");
		

		return arr[arr.length-1].replace("\"", "");
	}

}

xml:也可以直接用注解的方式

<servlet>
  <servlet-name>Upload</servlet-name>
  <servlet-class>wodeschool.test.UploadServlet</servlet-class>
  <multipart-config>
  <max-file-size>1000000</max-file-size>
  <max-request-size>1001024</max-request-size>
  <file-size-threshold>4096</file-size-threshold>
   </multipart-config>
  </servlet>
  <servlet-mapping>
  <servlet-name>Upload</servlet-name>
  <url-pattern>/upload</url-pattern>
  </servlet-mapping>


一下为笔记部分:

envtype="multipart/form-data"是上传二进制数值的意思,如果删除它就是一个普通的表单,如果通过request.getParameter(String name)
获取值得话,获取的只是文件的名称。


//获取文件名称的方式:创建一个方法
private String getFileName(Part part){
    //通过文件头
    Interator<String> it=part.getHeaderNames().iterator;
    while(it.hasNext())//通过迭代器看文件头的内容
    {
        String name=it.mext();
        System.out.println(name+part.getHeader(name));
    }

//分割字符串:
String arr=header.split("filename=");//切割成数组
String fileName=arr[srr.length-1].replace("\"","");获取最后一个元素的值并去掉双引号。

return fileName;
}

 

© 著作权归作者所有

奔跑的码农

奔跑的码农

粉丝 16
博文 32
码字总数 39458
作品 0
海淀
程序员
私信 提问
Servlet 3.0 新特性详解

简介: Servlet 是 Java EE 规范体系的重要组成部分,也是 Java 开发人员必须具备的基础技能,Servlet 3.0 是 Servlet 规范的最新版本。本文主要介绍了 Servlet 3.0 引入的若干重要新特性,包...

红薯
2010/04/23
1K
3
Servlet 3.0 新特性

Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布。该版本在前一版本(Servlet 2.5)的基础上提供了若干新特性用于简化 Web 应用的开发和部署。其中有几项特性的引入...

壹炮倾城
2013/06/13
0
1
Servlet 3.0 特性详解

Servlet 是 Java EE 规范体系的重要组成部分,也是 Java 开发人员必须具备的基础技能,本文主要介绍了 Servlet 3.0 引入的若干重要新特性,包括异步处理、新增的注解支持、可插性支持等等,为...

那位先生
2015/06/12
0
0
jsp上传文件fileupload

手把手教Jsp上传文件(FileUpload+Servlet) 本教程以Apache组织的commons项目中的FileUpload项目做为jsp的文件上传组件,FileUpload项目完全尊守RFC1867规范中 关于在HTTP request 中通过Post方...

功夫panda
2012/02/20
0
0
Servlet3.0中Servlet的使用

目录 1.注解配置 2.异步调用 3.文件上传 相对于之前的版本,Servlet3.0中的Servlet有以下改进: 支持注解配置。 支持异步调用。 直接有对文件上传的支持。 在这篇文章中我将主要讲这三方面的...

王爵nice
2014/08/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
41分钟前
3
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
8
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
4
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部