fileupload控件上传图片,fileupload实现多文件上传

fileupload控件上传图片,fileupload实现多文件上传,使用fileupload组件实现文件上传功能

这篇文章主要为大家详细介绍了使用文件上传实现文件上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

FileUpload文件上传

文件上传是街头流氓的英国国会下院组件提供的上传组件,它最主要的工作就是帮我们解析request.getInpustream()。

使用文件上传组件首先需要引入两个冲突包:

公共-文件上传。冲突

commons-io.jar

文件上传的核心类有DiskFileItemFactory、ServletFileUpload、FileItem。

使用fileUpload固定步骤:

创建工厂类:DiskFileItemFactory factory=new DiskFileItemFactory();

创建解析器:servlet文件上传上传=新servlet文件上传(工厂);

使用解析器解析请求对象:List list=upload.parseRequest(请求);

一个FileItem对象对应一个表单项。FileItem类有如下方法:

String getFieldName():获取表单项的名字的属性值。

String getName():获取文件字段的文件名。如果是普通字段,则返回空

String getString():获取字段的内容。如果是普通字段,则是它的价值值;如果是文件字段,则是文件内容。

String getContentType():获取上传的文件类型,例如文本/纯文本、图像。如果是普通字段,则返回零。

long getSize():获取字段内容的大小,单位是字节。

布尔型isFormField():判断是否是普通表单字段,若是,返回没错,否则返回错误。

InputStream getInputStream():获得文件内容的输入流。如果是普通字段,则返回价值值的输入流。

前端页面

% @ page language= Java content type= text/html;charset=utf-8

pageEncoding=utf-8%

!文档类型超文本标记语言

超文本标记语言

meta charset=utf-8

标题在此插入标题/标题

/头

身体

表单操作=上传servlet enctype= multipart/form-data 方法= post

输入类型=文本名称=用户名

输入类型=密码名称=密码

输入类型=文件名称=图片

输入类型=提交

/表单

/body

/html

UploadServlet

包pers。张。servlet

导入Java。io。文件;

导入Java。io。io异常;

导入Java。util。列表;

导入Java。util。uuid

导入javax。servlet。servlet异常;

导入javax。servlet。http。http servlet

导入javax。servlet。http。http servlet请求;

导入javax。servlet。http。http servlet响应;

导入org。阿帕奇。公地。文件上传。文件项目;

导入组织。阿帕奇。公地。文件上传。磁盘。磁盘fileitemfactory

导入org。阿帕奇。公地。文件上传。servlet。servlet文件上传;

公共类UploadServlet扩展HttpServlet {

受保护的void doGet(HttpServletRequest请求,HttpServletResponse响应)引发ServletException,IOException {

doPost(请求、响应);

}

受保护的void doPost(HttpServletRequest请求,HttpServletResponse响应)引发ServletException,IOException {

DiskFileItemFactory factory=new DiskFileItemFactory();

servlet文件上传上传=新servlet文件上传(工厂);

请求。setcharacterencoding(“utf-8”);

//文件名中文乱码处理也可以如此写

//上传。setheaderencoding( utf-8 );

//设置缓冲区大小与临时文件目录

工厂。setsize阈值(1024 * 1024 * 10);

文件上传temp=新文件( e: 上传temp );

上传温度。mkdirs();

工厂。设置存储库(上传临时);

//设置单个文件大小限制

上传。setfilesizemax(1024 * 1024 * 10);

//设置所有文件总和大小限制

上传。setsizemax(1024 * 1024 * 30);

尝试{

ListFileItem list=upload。解析请求(请求);

系统。出去。println(列表);

for (FileItem fileItem:list){

如果(!fileitem。是formfield()fileitem。getname()!=null!.等于(fileitem。getname()){

string filName=fileitem。getname();

//利用UUID生成伪随机字符串,作为文件名避免重复

String uuid=UUID.randomUUID().toString();

//获取文件后缀名

字符串后缀=filname。子串(filname。lastindexof( . ));

//获取文件上传目录路径,在项目部署路径下的上传目录里。若想让浏览器不能直接访问到图片,可以放在WEB-INF下

string upload path=request . getsession()。getServletContext()。get real path(/upload );

File file=新文件(upload path);

file . mkdirs();

//将文件写入磁盘。在这一行执行之后,如果有任何临时文件,它将被自动删除。

fileItem.write(新文件(uploadPath,uuid后缀));

}

}

} catch(异常e) {

e . printstacktrace();

}

}

}

测试

控制台打印:

复制代码如下:【name=null,store location=e: upload temp upload _ 9e 72474 _ 16 ddcc cabe 6 _ _ 8000 _ 000000 . tmp,size=5字节,isform field=true,fieldname=username,name=null,store location=e: upload temp upload _ 9e 72474 _ 16 ddcc cabe 6 _ _ 8000 _ 000001 . tmp,size=6字节,isform field=

项目部署路径下的上传文件夹:

除了以上方法,还要注意使用fileUpload组件实现文件上传:

中文文件名乱码处理:servlet fileupload.setheader编码(“UTF-8”)或request . setcharacter encoding(“UTF-8”);

常见表单域的中文乱码处理:新字符串(str。getbytes ("ISO-8859-1 "," UTF-8 "));

设置内存缓冲区的大小,默认为10kb:diskfileitemcfactory . setsize threshold(1024 * 1024);

指定临时文件目录。如果单个文件的大小超过了内存缓冲区,文件会被临时缓存在这个目录下:diskfileitemcfactory . set repository(file);

设置单个文件大小限制,如果一个文件超过这个大小,就会抛出一个fileuploadbase . filesizelimitexceedexception:servlet file upload . setfilesizemax(1024102410);

设置所有文件,即请求大小限制。如果文件之和超过这个大小,就会抛出fileuploadbase . sizelimitedexception:servlet file upload . setsizemax(1024102420);

使用UUID生成伪随机字符串作为文件名以避免重复:UUID.randomUUID()。toString();

将文件写入硬盘。写入后,系统会自动删除放置在临时文件目录中的文件:fileitem.write(新文件(路径,文件名));

另外:如果没有指定临时文件目录,默认采用系统默认的临时文件路径,可以通过system . getproperty(" Java . io . tmpdir ")获取。tomcat系统默认的临时目录是“Tomcat安装目录/temp/”。

Apache文件上传组件在解析上传数据中各个字段的内容时,需要临时保存解析后的数据,以便以后对数据进行进一步处理(保存在磁盘上的特定位置或者插入数据库)。因为Java虚拟机默认可以使用的内存空间是有限的,超过限制就会抛出“java.lang.OutOfMemoryError”错误。如果上传的文件很大,比如800M文件,文件的内容无法临时保存在内存中,那么Apache文件上传组件就用临时文件来代替保存数据;但如果上传的文件很小,比如600字节的文件,显然直接存储在内存中性能会更好。

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

fileupload控件上传图片,fileupload实现多文件上传