第一步:首先建个上传文件的简单的界面,代码如下:文件名(FileUpload.jsp)
- <%@ 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 οnclick="apply();return false;" type="submit" value="上传文件"></td>
- </tr>
- </table>
- </form>
- </body>
- </html>
第二步:建立一个ActionForm,代码如下:文件名(FileUploadForm.java)
- 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)
- 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();
- }
- }
- }
第四步:写strust的配置文件struts-config.xml,代码如下:
- <?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中加上下面的代码
- <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>
com.filter.GlobalFilter代码如下:
- 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() {
- }
- }
经过以上的五步,文件的上传功能就实现了。