Struts2单文件上传

第一步:首先写个上传文件的页面(简单的一个form表单)

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传</title>
</head>
<body>
    <h1>文件上传</h1>
    <br><br>
    <form action="/Struts2-day02pm/upload/one_upload.action" method="post" enctype="multipart/form-data">
        文件上传1:<br><br>
        <input type="file" name="oneFile"><br><br>
        <input type="submit" value="开始上传">
    </form>

</body>

第二步:创建一个基类BaseAction.java,继承ActionSupport,并实现ServletRequestAware,ServletResponseAware,ServletContextAware三个接口,重写三个接口的set方法

public class BaseAction extends ActionSupport implements ServletRequestAware,ServletResponseAware,ServletContextAware{
    /**
     * 编写一个基类,继承ActionSupport并实现相应的接口
     * 以后的Action直接继承该类,就可以简单获取到Servlet API
     * 这是一个典型的适配设计模式
     * @author Owen
     */

    private static final long serialVersionUID = 7267018575222346353L;

    @Override
    public void setServletContext(ServletContext servletContext) {
    }

    @Override
    public void setServletResponse(HttpServletResponse response) {
    }

    @Override
    public void setServletRequest(HttpServletRequest request) {
    }

}

第三步:创建OneUploadAction请求处理类,继承BaseAction

public class OneUploadAction extends BaseAction {

    private static final long serialVersionUID = -4445894434193884175L;
//    该属性名必须和<input type="file" name="oneFile">中name值一致
    private File oneFile;
//    真实名称
    private String oneFileFileName;
//    文件类型
    private String oneFileContentType;

    private HttpServletRequest request;

    @Override
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }

    @Override
    public String execute() throws Exception {
//        获取保存上传文件在服务器的真是路径
        String uploadPath = request.getServletContext().getRealPath("upload");
        System.out.println(uploadPath);//目录真是路径
        System.out.println("oneFile--"+oneFile.getName());//文件临时名称
        System.out.println("oneFileFileName--"+oneFileFileName);//文件原始名称
        System.out.println("oneFileContentType--"+oneFileContentType);//文件类型
//        第一种:该步骤适合上传小文件
//        将临时文件复制到硬盘上的真是路径
        /*
        File file = new File(uploadPath, oneFileFileName);//拼接文件的存放路径和存放文件的真实名称
        FileUtils.copyFile(oneFile, file);//将临时文件复制到上面这个路径
        */

//        第二种:适合大文件上传操作
        /*InputStream is = null;
        OutputStream os = null;

        is = new FileInputStream(oneFile);
        os = new FileOutputStream(new File(uploadPath,oneFileFileName));

        byte[] buffer = new byte[500];
        int length = 0;
        while((length=is.read(buffer,0,buffer.length)) != -1){
            os.write(buffer, 0,length);
        }
        os.close();
        is.close();*/
        copyFile(uploadPath);

        return SUCCESS;
    }
    public void copyFile(String uploadPath){
        InputStream is = null;
        OutputStream os = null;

        try {
            is = new FileInputStream(oneFile);
            os = new FileOutputStream(new File(uploadPath,oneFileFileName));

            byte[] buffer = new byte[500];
            int len = 0;
            while((len=is.read(buffer,0,buffer.length)) != -1){
                os.write(buffer, 0,len);
            }
            os.close();
            is.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public File getOneFile() {
        return oneFile;
    }

    public void setOneFile(File oneFile) {
        this.oneFile = oneFile;
    }

    public String getOneFileFileName() {
        return oneFileFileName;
    }

    public void setOneFileFileName(String oneFileFileName) {
        this.oneFileFileName = oneFileFileName;
    }

    public String getOneFileContentType() {
        return oneFileContentType;
    }

    public void setOneFileContentType(String oneFileContentType) {
        this.oneFileContentType = oneFileContentType;
    }

}

第三步:配置struts.xml文件

<struts>

    <package name="upload-default" namespace="/upload" extends="struts-default">

        <action name="one_upload" class="com.struts2.day02pm.action.OneUploadAction">
            <result>/WEB-INF/jsp/one_upload_ok.jsp</result>
        </action>

    </package>

</struts>

第四步:浏览器测试

时间: 2024-10-11 06:36:41

Struts2单文件上传的相关文章

关于Struts2单文件上传

要实现Struts2框架的文件上传,需要用到2个jar包 commons-fileupload-1.2.2.jar commons-io-2.0.1.jar 由于文件解析Struts2内部已经帮我们做好了,大大降低了开发难度,我们只需要在Action里设置好对应的参数,目录进行使用即可. 来个小示例: upload.jsp 这个页面的表单有三点需要注意的: 1.表单必须使用post方式提交 2.表单编码类型 enctype="multipart/form-data"   3.<s

Struts2单文件上传原理及示例

一.文件上传的原理 表单元素的enctype属性指定的是表单数据的编码方式,该属性有3个值: 1.application/x-www-form-urlencoded:这是默认编码方式,它只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式. 2.multipart/form-data:这种编码方式的表单会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里. 3.text/plain:这种方式主要适用于直接通过表单发送邮件的

struts2实现文件上传和下载

在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就单文件上传和多文件上传的源代码进行一下讲解,这里需要导入文件下载上传的两个jar文件,一个是commons-fileupload-1.2.2.jar,另一个是commons-io-2.0.

struts2之单文件上传(7)

前台页面jsp <form action="uploadAction" enctype="multipart/form-data" method="post"> <label>上传文件:</label> <input type="file" name="myfile"/> <input type="submit" value=&quo

【Java】Struts2文件上传-单文件上传,多文件上传

单文件上传 表单: <form action="upload1.action" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="name" id="name"><br> 照片:<input type="file" name=&qu

Struts2 单个文件上传/多文件上传

1导入struts2-blank.war所有jar包:\struts-2.3.4\apps\struts2-blank.war 单个文件上传 upload.jsp <s:form action="upload2.action" method="post" theme="simple" enctype="multipart/form-data"> <tr> <td id="more&quo

Struts2多文件上传

第一步:首先创建一个多文件上传的页面 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>多文件上传</title> </head> <body> <h1>多文件上传</h1> <br><br> <form

Struts2完成文件上传

文件上传是WEB应用经常需要面对的问题.在大部分时候,用户的请求参数是在表单域输入的字符串,但如果为表单元素设置enctype="multipart/form-data"属性,则提交表单时候不再是以字符串方式提交请求参数,而是以二进制编码的方式提交请求,此时直接通过HttpServletRequest的getParameter方法就无法正常获取请求参数的值,而通过二进制流来获取请求内容,就可以获取到上传文件的内容,从而实现文件上传的功能. Struts2的文件上传支持在原有的文件上传项

struts2(六) 文件上传和下载

前面对文件下载提过一点点,这里正好要讲文件上传,就放在一起在说一遍. --WH 一.单文件上传 在没学struts2之前,我们要写文件上传,非常麻烦,需要手动一步步去获取表单中的各种属性,然后在进行相应的处理,而在struts2中就不需要了,因为有一个fileUpload拦截器帮我们全做完了.我们只需要添加一点点信息,就可以完成上传的功能. 1.Action中需要提供三个属性 File fieldName: //文件表单项名称,也就是上传控件所填写的name属性名 String fileCont