jsp\struts1.2\struts2 中文件上传
刚刚做了三个文件上传的Demo
a.在jsp中简单利用Commons-fileupload组件实现
b.在struts1.2中实现
c.在sturts2中实现
现在把Code与大家分享一下..
注:此为三个简单Demo,仅供练习用,并没有做太多上传限制
如有兴趣可以自行查看相关文档说明
一.在JSP环境中利用Commons-fileupload组件实现文件上传
1.页面upload.jsp清单如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>The FileUpload Demo</title> </head> <body> <form action="UploadFile" method="post" enctype="multipart/form-data"> <p><input type="text" name="fileinfo" value="">文件介绍</p> <p><input type="file" name="myfile" value="浏览文件"></p> <p><input type="submit" value="上 传"></p> </form> </body></html>
package org.chris.fileupload;import java.io.File;import java.io.IOException;import java.util.Iterator;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.*;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileItemFactory;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;public class FileUplaodServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");//文件的上传部分boolean isMultipart = ServletFileUpload.isMultipartContent(request);if(isMultipart){try {FileItemFactory factory = new DiskFileItemFactory();ServletFileUpload fileload = new ServletFileUpload(factory);// 设置最大文件尺寸,这里是4MB fileload.setSizeMax(4194304);List<FileItem> files = fileload.parseRequest(request);Iterator<FileItem> iterator = files.iterator();while(iterator.hasNext()){FileItem item = iterator.next();if(item.isFormField()){String name = item.getFieldName();String value = item.getString();System.out.println("表单域名为: " + name + "值为: " + value);}else{//获得获得文件名,此文件名包括路径String filename = item.getName();if(filename != null){File file = new File(filename);//如果此文件存在if(file.exists()){File filetoserver = new File("d:\\upload\",file.getName());item.write(filetoserver);System.out.println("文件 " + filetoserver.getName() + " 上传成功!!");}}}}} catch (Exception e) {System.out.println(e.getStackTrace());}}}}
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><servlet><servlet-name>UploadFileServlet</servlet-name><servlet-class>org.chris.fileupload.FileUplaodServlet</servlet-class></servlet><servlet-mapping><servlet-name>UploadFileServlet</servlet-name><url-pattern>/UploadFile</url-pattern></servlet-mapping><welcome-file-list><welcome-file>/Index.jsp</welcome-file></welcome-file-list></web-app>
<%@ page language="java" pageEncoding="ISO-8859-1"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%> <html> <head><title>JSP for FileForm form</title></head><body><html:form action="/file" enctype="multipart/form-data"><html:file property="file1"></html:file><html:submit/><html:cancel/></html:form></body></html>
/* * Generated by MyEclipse Struts * Template path: templates/java/JavaClass.vtl */package action;import java.io.*;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 form.FileForm;/** * @author Chris * Creation date: 6-27-2008 * * XDoclet definition: * @struts.action path="/file" name="fileForm" input="/file.jsp" */public class FileAction extends Action {/* * Generated Methods *//** * Method execute * @param mapping * @param form * @param request * @param response * @return ActionForward */public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {FileForm fileForm = (FileForm) form;FormFile file1=fileForm.getFile1();if(file1!=null){//上传路径String dir=request.getSession(true).getServletContext().getRealPath("/upload");OutputStream fos=null;try {fos=new FileOutputStream(dir+"/"+file1.getFileName());fos.write(file1.getFileData(),0,file1.getFileSize());fos.flush();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try{fos.close();}catch(Exception e){}}}//页面跳转return mapping.findForward("success");}}
package form;import javax.servlet.http.HttpServletRequest;import org.apache.struts.action.ActionErrors;import org.apache.struts.action.ActionForm;import org.apache.struts.action.ActionMapping;import org.apache.struts.upload.FormFile;/** * @author Chris * Creation date: 6-27-2008 * * XDoclet definition: * @struts.form name="fileForm" */public class FileForm extends ActionForm {/* * Generated Methods */private FormFile file1;/** * Method validate * @param mapping * @param request * @return ActionErrors */public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {// TODO Auto-generated method stubreturn null;}/** * Method reset * @param mapping * @param request */public void reset(ActionMapping mapping, HttpServletRequest request) {// TODO Auto-generated method stub}public FormFile getFile1() {return file1;}public void setFile1(FormFile file1) {this.file1 = file1;}}
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config> <data-sources /> <form-beans > <form-bean name="fileForm" type="form.FileForm" /> </form-beans> <global-exceptions /> <global-forwards /> <action-mappings > <action attribute="fileForm" input="/file.jsp" name="fileForm" path="/file" type="action.FileAction" validate="false"> <forward name="success" path="/file.jsp"></forward> </action> </action-mappings> <message-resources parameter="ApplicationResources" /></struts-config>
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>3</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>3</param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping></web-app>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix="s" uri="/struts-tags" %><html> <head> <title>The FileUplaodDemo In Struts2</title> </head> <body> <s:form action="fileUpload.action" method="POST" enctype="multipart/form-data"> <s:file name="myFile" label="MyFile" ></s:file> <s:textfield name="caption" label="Caption"></s:textfield> <s:submit label="提交"></s:submit> </s:form> </body></html>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix="s" uri="/struts-tags" %><html> <head> <title>ShowUpload</title> </head> <body> <div style ="padding: 3px; border: solid 1px #cccccc; text-align: center" > <img src ='UploadImages/<s:property value ="imageFileName"/> '/> <br /> <s:property value ="caption"/> </div > </body></html>
package com.chris;import java.io.*;import java.util.Date;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class FileUploadAction extends ActionSupport{ private static final long serialVersionUID = 572146812454l ; private static final int BUFFER_SIZE = 16 * 1024 ; //注意,文件上传时<s:file/>同时与myFile,myFileContentType,myFileFileName绑定 //所以同时要提供myFileContentType,myFileFileName的set方法 private File myFile;//上传文件 private String contentType;//上传文件类型 private String fileName;//上传文件名 private String imageFileName; private String caption;//文件说明,与页面属性绑定 public void setMyFileContentType(String contentType) { System.out.println("contentType : " + contentType); this .contentType = contentType; } public void setMyFileFileName(String fileName) { System.out.println("FileName : " + fileName); this .fileName = fileName; } public void setMyFile(File myFile) { this .myFile = myFile; } public String getImageFileName() { return imageFileName; } public String getCaption() { return caption; } public void setCaption(String caption) { this .caption = caption; } private static void copy(File src, File dst) { try { InputStream in = null ; OutputStream out = null ; try { in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE); out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE); byte [] buffer = new byte [BUFFER_SIZE]; while (in.read(buffer) > 0 ) { out.write(buffer); } } finally { if ( null != in) { in.close(); } if ( null != out) { out.close(); } } } catch (Exception e) { e.printStackTrace(); } } private static String getExtention(String fileName) { int pos = fileName.lastIndexOf("."); return fileName.substring(pos); } @Override public String execute() { imageFileName = new Date().getTime() + getExtention(fileName); File imageFile = new File(ServletActionContext.getServletContext().getRealPath("/UploadImages" ) + "/" + imageFileName); copy(myFile, imageFile); return SUCCESS; }}
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="example" namespace="/" extends="struts-default"><action name="fileUpload" name="code"><?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><filter > <filter-name > struts-cleanup </filter-name > <filter-class > org.apache.struts2.dispatcher.ActionContextCleanUp </filter-class > </filter > <filter-mapping > <filter-name > struts-cleanup </filter-name > <url-pattern > /* </url-pattern > </filter-mapping ><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping> <welcome-file-list> <welcome-file>Index.jsp</welcome-file> </welcome-file-list> </web-app>