Struts2文件上传

来源:互联网 发布:在淘宝买东西可靠吗 编辑:程序博客网 时间:2024/06/05 18:28
页面代码:
upload.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <base href="<%=basePath%>">    <title>文件上传</title>  </head>    <body>  <h2>文件上传1</h2>    <form action="upload/uploadAction" method="post" enctype="multipart/form-data">    文件上传: <input type="file" name="file"/><br>    <input type="submit" value="上传"/>    </form><hr><h2>文件上传2</h2>    <form action="upload2/uploadAction2 method="post" enctype="multipart/form-data">    文件上传: <input type="file" name="file"/><br>    <input type="submit" value="上传"/>    </form><hr><s:property value="#msg"/><img alt="图片" src="<%=basePath%>upload/${fileFileName}">  </body></html>


struts.xml配置:

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"    "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><!-- 开发模式下使用,这样可以打印出更详细的错误信息 --><constant name="struts.devMode" value="true"></constant><!--解决乱码    -->    <constant name="struts.i18n.encoding" value="UTF-8" />    <!-- 指定允许上传的文件最大字节数。默认值是2097152(2M) -->    <constant name="struts.multipart.maxSize" value="10701096"/>    <!-- 设置上传文件的临时文件夹,默认使用javax.servlet.context.tempdir -->    <constant name="struts.multipart.saveDir " value="d:/tmp" /><package name="upload" namespace="/upload" extends="struts-default"> <global-results>    <result name="error">/error.jsp</result>    </global-results>        <global-exception-mappings>    <exception-mapping result="error" exception="IOException"></exception-mapping>    </global-exception-mappings>        <action name="uploadAction" class="com.edifier.action.UploadAction" method="upload">    <result name="success">/upload.jsp</result>    </action>    </package><package name="upload2" namespace="/upload2" extends="struts-default">    <action name="uploadAction2" class="com.edifier.action.UploadAction2" method="upload2">    <param name="savePath">/upload</param>    <result name="success">/upload.jsp</result>    <result name="input">/error.jsp</result>    <interceptor-ref name="fileUpload">                <!-- 文件过滤 -->                <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>                <!-- 文件大小, 以字节为单位,如果没有配置常量struts.multipart.maxSize,那么下面这个配置有效,否则文件大小看常量配置的大小 -->                <param name="maximumSize">10701096</param>            </interceptor-ref>            <!-- 默认拦截器必须放在fileUpload之后,否则无效 -->            <interceptor-ref name="defaultStack" />    </action></package></struts>

Action类写法一:
package com.edifier.action;import java.io.File;import java.io.IOException;import org.apache.struts2.ServletActionContext;import org.aspectj.util.FileUtil;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionSupport;public class UploadAction extends ActionSupport{private File file;//文件路径private String fileFileName;//文件名private String fileContentType; //文件类型public File getFile() {return file;}public void setFile(File file) {this.file = file;}public String getFileFileName() {return fileFileName;}public void setFileFileName(String fileFileName) {this.fileFileName = fileFileName;}public String getFileContentType() {return fileContentType;}public void setFileContentType(String fileContentType) {this.fileContentType = fileContentType;}public String upload() throws IOException{String realPath = ServletActionContext.getServletContext().getRealPath("/upload");System.out.println("RealPath: " + realPath);//此为上传目录地址if(null != file){//根据 realPath 抽象路径名和 child 路径名字符串创建一个新 File 实例。File saveFile = new File(new File(realPath), fileFileName);if(!saveFile.getParentFile().exists()){saveFile.getParentFile().mkdir();//如果上传目录不存在,创建该目录}FileUtil.copyFile(file, saveFile);//调用java.io.FileUtil类中的copyFile方法,复制文件ActionContext.getContext().put("msg", "上传成功");//向值栈中存放一个msg的参数}return SUCCESS;}}

Action类写法二:
package com.edifier.action;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class UploadAction2 extends ActionSupport{private File file;private String fileFileName;private String fileContentType;private String savePath;//将上传目录名配置在struts.xml中,通过依赖注入获得目录名public File getFile() {return file;}public void setFile(File file) {this.file = file;}public String getFileFileName() {return fileFileName;}public void setFileFileName(String fileFileName) {this.fileFileName = fileFileName;}public String getFileContentType() {return fileContentType;}public void setFileContentType(String fileContentType) {this.fileContentType = fileContentType;}public String getSavePath() {return ServletActionContext.getServletContext().getRealPath(savePath); //获取上传目录绝对路径}public void setSavePath(String savePath) {this.savePath = savePath;}public String upload2() throws IOException{String saveFilePath = getSaveFile() + "/" + getFileFileName();//文件保存的绝对路径copyFile(saveFilePath,file);return SUCCESS;}//自定义复制文件方法,最好放在工具类中,saveFilePath上传目录路径,file上传的文件private void copyFile(String saveFilePath, File file){FileOutputStream fos = null;        FileInputStream fis = null;        try{        // 建立文件输出流        System.out.println(saveFilePath);        fos = new FileOutputStream(saveFilePath);        // 建立文件上传流        fis = new FileInputStream(file);        byte[] buffer = new byte[1024];        int len = 0;        while ((len = fis.read(buffer)) > 0) {        fos.write(buffer, 0, len);        }        } catch (Exception e) {        System.out.println("文件上传失败");        e.printStackTrace();        } finally {        close(fos, fis);        }}private void close(FileOutputStream fos, FileInputStream fis) {        if (fis != null) {            try {                fis.close();            } catch (IOException e) {                System.out.println("FileInputStream关闭失败");                e.printStackTrace();            }        }        if (fos != null) {            try {                fos.close();            } catch (IOException e) {                System.out.println("FileOutputStream关闭失败");                e.printStackTrace();            }        }    }}


0 0