以前struts1使用的FormFile我不是很喜欢,这下好了,struts2现在直接拿到File了,OK,上代码!
需要上传的话要用到2个jar包:commons-io-x.jar和commons-fileupload-x.jar导入到lib后即可。
PS:我的工程名字叫TestStruts
1.写action:(BaseAction.java见第一章节)
FormFileStruts2.java:
package com.xuyi.action; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class FormFileStruts2 extends BaseAction { public static final String ROOT = "upload\\"; private String username; //可以拿到file的流,使用tmp文件 private File image; //固定格式取file的真实文件名 private String imageFileName; //固定格式 private String imageContentType; private String msg; @Override public String execute() throws Exception { //配置src下面的struts.properties中加入struts.multipart.saveDir = /tmp //否则在上传文件时会出现Unable to find 'struts.multipart.saveDir' property setting的错误 String rootPath = getSession().getServletContext().getRealPath("/"); rootPath += ROOT; mkDirectory(rootPath); System.out.println(rootPath); try { upload(imageFileName, rootPath, image); } catch (RuntimeException e) { e.printStackTrace(); } msg = imageFileName; return SUCCESS; } /** * 根据路径创建一系列的目录 * * @param path */ boolean mkDirectory(String path) { File file = null; try { file = new File(path); if (!file.exists()) { return file.mkdirs(); } } catch (RuntimeException e) { e.printStackTrace(); } finally { file = null; } return false; } /** * 上传文件 * * @param savePath * 文件的保存路径 * @param uploadFile * 被上传的文件 * @return uploadFileName */ String upload(String uploadFileName, String savePath, File uploadFile) { FileOutputStream fos = null; FileInputStream fis = null; try { fos = new FileOutputStream(savePath + uploadFileName); fis = new FileInputStream(uploadFile); byte[] buffer = new byte[1024]; int len = 0; while ((len = fis.read(buffer)) > 0) { fos.write(buffer, 0, len); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { fos.close(); fis.close(); } catch (IOException e) { e.printStackTrace(); } } return uploadFileName; } public File getImage() { return image; } public void setImage(File image) { this.image = image; } public String getImageContentType() { return imageContentType; } public void setImageContentType(String imageContentType) { this.imageContentType = imageContentType; } public String getImageFileName() { return imageFileName; } public void setImageFileName(String imageFileName) { this.imageFileName = imageFileName; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getMsg() { return msg; } }
src下面新建一个struts.properties文件:
struts.multipart.saveDir = /tmp
2.配置struts.xml
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!--package: name可以随便指定 namespace指定页面的目录(/为根目录) extends指定为 struts-default.xml文件(此文件包含默认的设置和定义) --> <package name="struts" namespace="/" extends="struts-default"> <!--action:name是访问action的名称 class是action的类 method是访问的action里的方法等同于struts1的method result是返回url--> <!-- struts2 file_upload begin --> <action name="formFileStruts2" class="com.xuyi.action.FormFileStruts2"> <result name="success">/pages/struts2_form_file_result.jsp</result> </action> <!-- struts2 file_upload end --> </package> </struts>
3.在WebRoot下建立pages文件夹中创建jsp
struts2_form_file_submit.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Struts2-form上传示例-提交页</title> </head> <body> <form action="../formFileStruts2.action" method="post" enctype="multipart/form-data"> 用户名:<input type="text" name="username"><br/><br/> 图片:<input type="file" name="image"><br/><br/> <input type="submit" value="提交"> </form> </body> </html>
struts2_form_file_result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Struts2-form上传示例-结果页</title> </head> <body> ${username}上传图片${msg}成功! </body> </html>
4.访问:http://localhost:8080/TestStruts/pages/struts2_form_file_submit.jsp即可操作