zoukankan      html  css  js  c++  java
  • struts2,action上传文件

    通过servlet实现文件上传,可以用用servlet接受到request的值的话:主要是这句话 
    List<?> items = upload.parseRequest(request); 
    拿到文件对象列表。

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
            DiskFileItemFactory factory = new DiskFileItemFactory();  
            // 设置内存缓冲区,超过后写入临时文件  
            factory.setSizeThreshold(10240000);//10M  
            // 设置临时文件存储位置  
            ServletFileUpload upload = new ServletFileUpload(factory);  
            // 设置单个文件的最大上传值  
            upload.setFileSizeMax(10002400000l);//100M  
            // 设置整个request的最大值  
            upload.setSizeMax(10002400000l);//1000M  
            upload.setHeaderEncoding("UTF-8");  
            SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHH");  
            String time = formatter.format(new Date());  
            String day = time.substring(0, 7);  
            String timeDetail = time.substring(8);  
            String ftpDirectory = "H:\upload\"+day+"\"+timeDetail;  
            try {  
                List<?> items = upload.parseRequest(request);     FileItem item = null;  
                String fileName = null;  
                for (int i = 0 ;i < items.size(); i++){  
                    item = (FileItem) items.get(i);  
                    fileName = item.getName();  
                    InputStream fis = item.getInputStream();  
                    // 保存文件  
                    if (!item.isFormField() && item.getName().length() > 0) {  
                        this.uploadFileByApacheByBinary(ftpDirectory,fis,fileName);  
                        fis.close();   
                    }  
                }  
            } catch (FileUploadException e) {  
                e.printStackTrace();  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  

    但是struts2的action拿request的内容

    List<?> items = upload.parseRequest(request);

    取不到,原因是struts2讲request处理过了,可以通过struts2的方式上传文件

    通过2种方式模拟单个文件上传,效果如下所示

    开发步骤如下:

    1、新建一个web工程,导入struts2上传文件所需jar,如下图

    目录结构

                 

    2、新建Action 

    第一种方式

    复制代码
    package com.ljq.action;

    import java.io.File;

    import org.apache.commons.io.FileUtils;
    import org.apache.struts2.ServletActionContext;

    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;

    @SuppressWarnings("serial")
    public class UploadAction extends ActionSupport{

    private File image; //上传的文件
    private String imageFileName; //文件名称
    private String imageContentType; //文件类型

    public String execute() throws Exception {
    String realpath = ServletActionContext.getServletContext().getRealPath("/images");
    //D:apache-tomcat-6.0.18webappsstruts2_uploadimages
    System.out.println("realpath: "+realpath);
    if (image != null) {
    File savefile = new File(new File(realpath), imageFileName);
    if (!savefile.getParentFile().exists())
    savefile.getParentFile().mkdirs();
    FileUtils.copyFile(image, savefile);
    ActionContext.getContext().put("message", "文件上传成功");
    }
    return "success";
    }

    public File getImage() {
    return image;
    }

    public void setImage(File image) {
    this.image = image;
    }

    public String getImageFileName() {
    return imageFileName;
    }

    public void setImageFileName(String imageFileName) {
    this.imageFileName = imageFileName;
    }

    public String getImageContentType() {
    return imageContentType;
    }

    public void setImageContentType(String imageContentType) {
    this.imageContentType = imageContentType;
    }


    }
    复制代码

                 

    第二种方式

    复制代码
    package com.ljq.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;

    @SuppressWarnings("serial")
    public class UploadAction2 extends ActionSupport {

    // 封装上传文件域的属性
    private File image;
    // 封装上传文件类型的属性
    private String imageContentType;
    // 封装上传文件名的属性
    private String imageFileName;
    // 接受依赖注入的属性
    private String savePath;

    @Override
    public String execute() {
    FileOutputStream fos = null;
    FileInputStream fis = null;
    try {
    // 建立文件输出流
    System.out.println(getSavePath());
    fos = new FileOutputStream(getSavePath() + "\" + getImageFileName());
    // 建立文件上传流
    fis = new FileInputStream(getImage());
    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);
    }
    return SUCCESS;
    }

    /**
    * 返回上传文件的保存位置
    *
    * @return
    */
    public String getSavePath() throws Exception{
    return ServletActionContext.getServletContext().getRealPath(savePath);
    }

    public void setSavePath(String savePath) {
    this.savePath = savePath;
    }

    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;
    }

    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();
    }
    }
    }

    }
    复制代码

                   

    struts.xml配置文件

    复制代码
    <?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>
    <!-- 该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。
    如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。 -->
    <constant name="struts.action.extension" value="do" />
    <!-- 设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭 -->
    <constant name="struts.serve.static.browserCache" value="false" />
    <!-- 当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 -->
    <constant name="struts.configuration.xml.reload" value="true" />
    <!-- 开发模式下使用,这样可以打印出更详细的错误信息 -->
    <constant name="struts.devMode" value="true" />
    <!-- 默认的视图主题 -->
    <constant name="struts.ui.theme" value="simple" />
    <!--<constant name="struts.objectFactory" value="spring" />-->
    <!--解决乱码 -->
    <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">
    <action name="*_upload" class="com.ljq.action.UploadAction" method="{1}">
    <result name="success">/WEB-INF/page/message.jsp</result>
    </action>
    </package>

    <package name="upload2" extends="struts-default">
    <action name="upload2" class="com.ljq.action.UploadAction2" method="execute">
    <!-- 动态设置savePath的属性值 -->
    <param name="savePath">/images</param>
    <result name="success">/WEB-INF/page/message.jsp</result>
    <result name="input">/upload/upload.jsp</result>
    <interceptor-ref name="fileUpload">
    <!-- 文件过滤 -->
    <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
    <!-- 文件大小, 以字节为单位 -->
    <param name="maximumSize">1025956</param>
    </interceptor-ref>
    <!-- 默认拦截器必须放在fileUpload之后,否则无效 -->
    <interceptor-ref name="defaultStack" />
    </action>
    </package>
    </struts>
    复制代码

                

    上传表单页面

    复制代码
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@taglib uri="/struts-tags" prefix="s" %>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>文件上传</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    </head>

    <body>
    <!-- ${pageContext.request.contextPath}/upload/execute_upload.do -->
    <!-- ${pageContext.request.contextPath}/upload2/upload2.do -->
    <form action="${pageContext.request.contextPath}/upload2/upload2.do"
    enctype="multipart/form-data" method="post">
    文件:<input type="file" name="image">
    <input type="submit" value="上传" />
    </form>
    <br/>
    <s:fielderror />
    </body>
    </html>
    复制代码

                

    显示结果页面

    复制代码
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>

    <title>上传成功</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    </head>

    <body>
    上传成功!
    <br/><br/>
    <!-- ${pageContext.request.contextPath} tomcat部署路径,
    如:D:apache-tomcat-6.0.18webappsstruts2_upload -->
    <img src="${pageContext.request.contextPath}/<s:property value="'images/'+imageFileName"/>">
    <s:debug></s:debug>
    </body>
    </html>
    复制代码

     

     
     
  • 相关阅读:
    Saltstack module acl 详解
    Saltstack python client
    Saltstack简单使用
    P5488 差分与前缀和 NTT Lucas定理 多项式
    CF613D Kingdom and its Cities 虚树 树形dp 贪心
    7.1 NOI模拟赛 凸包套凸包 floyd 计算几何
    luogu P5633 最小度限制生成树 wqs二分
    7.1 NOI模拟赛 dp floyd
    springboot和springcloud
    springboot集成mybatis
  • 原文地址:https://www.cnblogs.com/linjian/p/4833957.html
Copyright © 2011-2022 走看看