这篇文章主要为大家详细介绍了Apache commons文件上传文件上传实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
文件上传的方法主要目前有两个常用的,一个是
SmartUpload
,一个是街头流氓的Commons fileupload
.我们这里主要介绍下第二个的用法,首先要上传文件,注意几个问题:
一表格表单内,要添加空间输入类型=文件名称=我的文件
2表格表单的内容格式要定义成多部分/表单数据格式
3需要类库:1 commons-io。jar 2 commons-文件上传-1。3 .1 .冲突
接下来我们看下用法。
首先阅读Apache commons文件上传的官方文档可以发现下面几个常用的函数:
一创建文件解析对象
复制代码代码如下:DiskFileUpload DiskFileUpload=new DiskFileUpload();
2进行文件解析后放在目录中,因为这个类库支持多个文件上传,因此把结果会存在目录中。
复制代码代码如下:ListFileItem list=disk file upload。解析请求(请求);
3获取上传文件,进行分析(不是必须)
复制代码代码如下:File remoteFile=新文件(新字符串(fileItem.getName().getBytes(), UTF-8 );
四创建新对象,进行流拷贝
文件1=新文件(this.getServletContext().getRealPath(attachment ),远程文件。getname());
file1.getParentFile().mkdirs();
文件1。创建新文件();
InputStream ins=fileitem。getinputstream();
输出流ou=新文件输出流(文件1);
尝试{
字节[]缓冲区=新字节[1024];
int len=0;
while((len=ins.read(buffer)) -1)
ous.write(buffer,0,len);
out.println(以保存文件文件1。getabsolutepath() br/);
}最后{
欧斯。close();
移民局。close();
}
这样我们就完成了文件的上传。
fileUpload.html
表单操作= servlet/上传servlet 方法= post enctype= multipart/form-data
div align=center
字段集样式=宽度:80%
神话;传奇上传文件/legendbr/
div align=left 上传文件1/格
div align=left
输入类型=文件名称=文件1/
/div
div align=left 上传文件2/格
div align=left
输入类型=文件名称=文件2/
/div
差异
div align=left 上传文件说明1/格
div align= left input type= text name= description 1 //div
/div
差异
div align=left 上传文件说明2/格
div align= left input type= text name= description 2 //div
/div
差异
div align=left
输入类型=提交值=上传文件/
/div
/div
/字段集
/div
/表单
web.xml
小型应用程序
servlet-name上传servlet/servlet-name
servlet-classcom.test.hello.UploadServlet/servlet-class
/servlet
小型应用程序映射
servlet-name上传servlet/servlet-name
全球资源定位器(Uniform Resource Locator)模式/servlet/UploadServlet/url模式
/servlet-映射
UploadServlet.java
包com。测试。你好;
导入Java。io。文件;
导入Java。io。文件输出流;
导入Java。io。io异常;
导入Java。io。inputstream
导入Java。io。输出流;
导入Java。io。版画家;
导入Java。util。列表;
导入javax。servlet。servlet异常;
导入javax。servlet。http。http servlet
导入javax。servlet。http。http servlet请求;
导入javax。servlet。http。http servlet响应;
导入org。阿帕奇。公地。文件上传。diskfileupload
导入org。阿帕奇。公地。文件上传。文件项目;
导入组织。阿帕奇。公地。文件上传。文件上传异常;
公共类UploadServlet扩展HttpServlet {
/**
*对象的构造函数。
*/
公共UploadServlet() {
super();
}
/**
小型应用程序的破坏。英国铁路公司
*/
public void destroy() {
超级棒。destroy();//只将“摧毁”字符串放入日志中
//将您的代码放在这里
}
/**
小型应用程序的多吉特方法。英国铁路公司
*
*当表单的标记值等于得到时,调用此方法。
*
* @param请求客户端向服务器发送的请求
* @param响应服务器发送给客户端的响应
* @发生错误时抛出ServletException
* @发生错误时抛出IOException
*/
公共void doGet(HttpServletRequest请求,HttpServletResponse响应)
引发ServletException,IOException {
回应。setcharacterencoding(“UTF-8”);
response.getWriter().println(请以邮政方式上传文件);
}
/**
小型应用程序的doPost方法。英国铁路公司
*
*当表单的标记值方法等于邮政时,调用此方法。
*
* @param请求客户端向服务器发送的请求
* @param响应服务器发送给客户端的响应
* @发生错误时抛出ServletException
* @发生错误时抛出IOException
*/
@SuppressWarnings({ unchecked , deprecation })
公共void doPost(http servlet请求请求,HttpServletResponse响应)
引发ServletException,IOException {
文件文件1=空,文件2=空
字符串描述1=空,描述2=空.
回应。setcharacterencoding(“UTF-8”);
请求。setcharacterencoding(“UTF-8”);
回应。设置内容类型(“文本/html”);
PrintWriter out=响应。getwriter();
DiskFileUpload DiskFileUpload=new DiskFileUpload();
尝试{
ListFileItem list=disk file upload。解析请求(请求);
out.println(遍历所有的FileItem.br/);
for(FileItem fileItem : list){
if(fileItem.isFormField()){
如果(描述1 。等于(fileitem。获取字段名()){
out.println(遍历到描述一.br/);
描述1=新字符串(fileItem.getString().getBytes(), UTF-8 );
}
如果(描述2 。等于(fileitem。获取字段名()){
out.println(遍历到描述2.br/);
描述2=新字符串(fileItem.getString().getBytes(), UTF-8 );
}
}否则{
if(文件1 ).等于(fileitem。获取字段名()){
File remoteFile=新文件(新字符串(fileItem.getName().getBytes(), UTF-8 );
out.println(遍历到文件一.br/);
out.println(客户端文件位置:远程文件。getabsolutepath() br/);
文件1=新文件(this.getServletContext().getRealPath(attachment ),远程文件。getname());
file1.getParentFile().mkdirs();
文件1。创建新文件();
InputStream ins=fileitem。getinputstream();
输出流ou=新文件输出流(文件1);
尝试{
字节[]缓冲区=新字节[1024];
int len=0;
while((len=ins.read(buffer)) -1)
ous.write(buffer,0,len);
out.println(以保存文件文件1。getabsolutepath() br/);
}最后{
欧斯。close();
移民局。close();
}
}
if(file2 ).等于(fileitem。获取字段名()){
File remoteFile=新文件(新字符串(fileItem.getName().getBytes(), UTF-8 );
out.println(遍历到文件2.br/);
out.println(客户端文件位置:远程文件。getabsolutepath() br/);
文件2=新文件(this.getServletContext().getRealPath(attachment ),远程文件。getname());
file2.getParentFile().mkdirs();
文件2。创建新文件();
InputStream ins=fileitem。getinputstream();
输出流ou=新文件输出流(文件2);
尝试{
字节[]缓冲区=新字节[1024];
int len=0;
while((len=ins.read(buffer)) -1)
ous.write(buffer,0,len);
out.println(以保存文件文件2。getabsolutepath() br/);
}最后{
欧斯。close();
移民局。close();
}
}
}
out.println(请求解析完毕br/br/);
}
}catch(FileUploadException e){}
out.println(!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN );
出去。println( HTML );
出去。println( HEAD TITLE a Servlet/TITLE/HEAD );
出去。println( BODY );
if(file1!=null){
出去。println( div );
出去。println( div align= left file 1;/div’);
出去。println( div align= left a href= 请求。getcontextpath()/attachment/
文件1。getname() target=_ blank 文件1。getname()/a );
出去。println(/div );
出去。println(/div );
}
if(file2!=null){
出去。println( div );
出去。println( div align= left file 2;/div’);
出去。println( div align= left a href= 请求。getcontextpath()/attachment/
文件2。getname() target=_ blank 文件2。getname()/a );
出去。println(/div );
出去。println(/div );
}
出去。println( div );
出去。println( div align= left description 1:/div );
出去。println( div align= left );
out.println(描述1);
出去。println(/div );
出去。println(/div );
出去。println( div );
出去。println( div align= left description 2:/div );
出去。println( div align= left );
out.println(描述2);
出去。println(/div );
出去。println(/div );
出去。println(/BODY );
出去。println(/HTML );
出去。flush();
出去。close();
}
/**
小型应用程序的初始化。英国铁路公司
*
* @发生错误时抛出ServletException
*/
公共void init()引发ServletException {
//将您的代码放在这里
}
}
运行示例
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。