个sevlet实现文件上传

来源:互联网 发布:攻击路由器软件 编辑:程序博客网 时间:2024/06/05 04:03

闲来无事,写一个sevlet实现文件上传!微笑

大部分人喜欢用别人写好的包,如commons-fileupload-1.2.2.jar,来实现文件上传,还有另外有一个包smartupload包 ,这两种方式!大笑

http协议文件上传,通过设置页面中的form的参数enctype为multipart/form-data,参数method="post"来实现文件上传,具体可以参考http文档,RFC_2616_HTTP_1[1].1_超文本传输协议_中文版。servlet通过request.getInputStream()得到输入文件流;参数通过request.getAttribute("name");,切记不要用request.getParameter("name").为啥,各位可以百度一下方法区别。文件可以通过得到文件名(通过request.getAttribute("fileName")),再加路径可以得到new File(FilePath,FileName)。本例可以通过新建一个对像new ParseServletInputStream(HttpServletRequest request,String FilePath),或new ParseServletInputStream(request)来解析输入流,并能通过此类删除上传的文件

本列主要有四个类,分别为ParseServletInputStream.java,ParseRequest.java,BodyRequest,AnnotationLogger;一个接口MultipartParameter定义输入流中的参数。

1.ParseServletInputStream类主要用来接收request,设置文件保存路径及删除上传文件。

源码中设置了两个此类构造方法,一个只有一个参数(request),一个另带一个文件路径的构造方法。源码如下:

2.ParseRequest是一个解析输入流抽像类

定义了一些解析流的公共方法。输入流中的参数有两种,一种参数内型是文件(input type="file "),另一种是参数类型是字符串(<input type="text"> ),参数内型是文件头要解析四行,参数类型是字符串头要解析三行,具体可参考http协议。所以抽象类定义解析四行方法,还有两个共用的方法,解析空行的和清空参数,源文件如下:

3.BodyRequest用来解析输入流

BodyRequest有两个内部类(FileRequest,ParameterRequest)都继承了ParseRequest,FileRequest主要用来解析流是文件类型的类,,ParameterRequest主要用来解析是参数 的类

4.MultipartParameter接口主要定义文件上传参数类型

可以参考http协议,主要定义一些http协议参数名称,源码如下

5.AnnotationLogger类用来注释掉logger和去掉注释掉logger

此类主要用来增加,或删除源文件中的loger输出,如果要logger输出,要增加log4j包,本列版本是log4j-1.2.15.jar

6.应用工程例子

源文件如上,工程下载,可以把项目引入到myeclipse,布暑到tomcat中。通过index.jsp提交form上传文件,FileUpLoad类是(servlet)接收输入流,处理结果通过response输出页面。

index.jsp运行页面如下

servlet接收如下:

文件保存在图片:

如果看不明白,可加Q(4758 2019),如要转载,请注名出处!

原创粉丝点击