基于struts 的FormFile实现文件的上传功能
2015-08-03 15:56
796 查看
第一步:首先建个上传文件的简单的界面,代码如下:文件名(FileUpload.jsp)
[java]
view plaincopyprint?
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传</title>
<mce:script type="text/javascript"><!--
function apply(){
var f=document.getElementById("form1");
var file=document.getElementById("file");
if(file.value!=''){
f.submit();
}else{
alert('请选择要上传的文件');
return false;
}
}
// --></mce:script>
</head>
<body>
<form id="form1" action="/FileUpload.do" method="post" enctype="multipart/form-data">
<table align="center">
<tr><td>
<input type="file" id="uploadFile" name="uploadFile" size="12" value=" "> <p> </td>
</tr>
<tr><td>
<input onclick="apply();return false;" type="submit" value="上传文件"></td>
</tr>
</table>
</form>
</body>
</html>
第三步:创建Action,代码如下,文件名(FileUploadAction)
[java]
view plaincopyprint?
package com.action;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
import com.form.FileUploadForm;
public class FileUploadAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
FileUploadForm uploadForm=(FileUploadForm) form;
FormFile uploadFile=uploadForm.getUploadFile();
//得到文件的名字
String fileName=uploadFile.getFileName();
//得到文件的大小
int fileSize=uploadFile.getFileSize();
//得到文件的输入流
InputStream is=uploadFile.getInputStream();
uploadFile(fileName,is);
return mapping.findForward("index");
}
/**
* 上传文件
* @param fileName
* @param is
*/
private void uploadFile(String fileName, InputStream is) {
try {
//设置上传文件要保存的路径
OutputStream os=new FileOutputStream("E:/save/"+fileName);
//设置一个Buffer用来缓存数据
byte[] buffer=new byte[1024*1024];
int len;
while((len=is.read(buffer))!=-1){
//将缓存的数据写到磁盘
os.write(buffer,0,len);
}
//关闭流
os.close();
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
经过以上四步,开始运行,要是上传的文件名是中文会报异常的,为此加上过滤器。
第五步:加上过滤器:代码如下:
在web.xml中加上下面的代码
[xhtml]
view plaincopyprint?
<filter>
<filter-name>GlobalFilter</filter-name>
<filter-class>com.filter.GlobalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>GlobalFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
经过以上的五步,文件的上传功能就实现了。
[java]
view plaincopyprint?
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传</title>
<mce:script type="text/javascript"><!--
function apply(){
var f=document.getElementById("form1");
var file=document.getElementById("file");
if(file.value!=''){
f.submit();
}else{
alert('请选择要上传的文件');
return false;
}
}
// --></mce:script>
</head>
<body>
<form id="form1" action="/FileUpload.do" method="post" enctype="multipart/form-data">
<table align="center">
<tr><td>
<input type="file" id="uploadFile" name="uploadFile" size="12" value=" "> <p> </td>
</tr>
<tr><td>
<input onclick="apply();return false;" type="submit" value="上传文件"></td>
</tr>
</table>
</form>
</body>
</html>
[java] view plaincopyprint? package com.form; import org.apache.struts.action.ActionForm; import org.apache.struts.upload.FormFile; public class FileUploadForm extends ActionForm { private FormFile uploadFile; public FormFile getUploadFile() { return uploadFile; } public void setUploadFile(FormFile uploadFile) { this.uploadFile = uploadFile; } } package com.form; import org.apache.struts.action.ActionForm; import org.apache.struts.upload.FormFile; public class FileUploadForm extends ActionForm { private FormFile uploadFile; public FormFile getUploadFile() { return uploadFile; } public void setUploadFile(FormFile uploadFile) { this.uploadFile = uploadFile; } }
第三步:创建Action,代码如下,文件名(FileUploadAction)
[java]
view plaincopyprint?
package com.action;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
import com.form.FileUploadForm;
public class FileUploadAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
FileUploadForm uploadForm=(FileUploadForm) form;
FormFile uploadFile=uploadForm.getUploadFile();
//得到文件的名字
String fileName=uploadFile.getFileName();
//得到文件的大小
int fileSize=uploadFile.getFileSize();
//得到文件的输入流
InputStream is=uploadFile.getInputStream();
uploadFile(fileName,is);
return mapping.findForward("index");
}
/**
* 上传文件
* @param fileName
* @param is
*/
private void uploadFile(String fileName, InputStream is) {
try {
//设置上传文件要保存的路径
OutputStream os=new FileOutputStream("E:/save/"+fileName);
//设置一个Buffer用来缓存数据
byte[] buffer=new byte[1024*1024];
int len;
while((len=is.read(buffer))!=-1){
//将缓存的数据写到磁盘
os.write(buffer,0,len);
}
//关闭流
os.close();
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
[xhtml] view plaincopyprint? <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="upload" type="com.form.FileUploadForm" /> </form-beans> <action-mappings> <action path="/FileUpload" type="com.action.FileUploadAction" name="upload" /> </action-mappings> <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/> <message-resources parameter="resources.application" /> <?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="upload" type="com.form.FileUploadForm" /> </form-beans> <action-mappings> <action path="/FileUpload" type="com.action.FileUploadAction" name="upload" /> </action-mappings> <controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/> <message-resources parameter="resources.application" />
经过以上四步,开始运行,要是上传的文件名是中文会报异常的,为此加上过滤器。
第五步:加上过滤器:代码如下:
在web.xml中加上下面的代码
[xhtml]
view plaincopyprint?
<filter>
<filter-name>GlobalFilter</filter-name>
<filter-class>com.filter.GlobalFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>GlobalFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
[java] view plaincopyprint? package com.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class GlobalFilter implements Filter{ public void init(FilterConfig filterConfig) throws ServletException{ System.out.println("===========in the filter=========="); } public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException{ try{ request.setCharacterEncoding("UTF-8"); chain.doFilter(request,response); }catch(Exception e){ e.printStackTrace(); } } public void destroy() { } } package com.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class GlobalFilter implements Filter{ public void init(FilterConfig filterConfig) throws ServletException{ System.out.println("===========in the filter=========="); } public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException{ try{ request.setCharacterEncoding("UTF-8"); chain.doFilter(request,response); }catch(Exception e){ e.printStackTrace(); } } public void destroy() { } }
经过以上的五步,文件的上传功能就实现了。
相关文章推荐
- Leetcode-102(Java) Binary Tree Level Order Traversal
- java动态代理详解
- 使用Struts2进行文件下载
- java设计模式
- 【JAVA】别特注意,POI中getLastRowNum() 和getLastCellNum()的区别
- [java_基础]内部类和静态类
- struts2整合json
- Java NIO框架Netty教程(二) – 白话概念
- ueditor1_4_3-utf8-jsp配置及自定义,结合struts2
- spring注解开发中常用注解以及简单配置
- java 接口回调,向上转型
- struts拦截器
- Java中Array与ArrayList的主要区别
- Ubuntu系统下eclipse配置mapreduce插件常见错误和解决办法汇总
- 【转】对Java Serializable(序列化)的理解和总结
- Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver问题解决方案
- Java学习笔记------自己书写的登录界面实例
- Java NIO框架Netty教程(一) – Hello Netty
- Java疑问 不解-------------- 为什么非要进行强制性类型转换???
- Java 8 新特性——Lambdas 表达式