• 基于struts2实现文件的上传


    第一步:在项目中配置struts2

    Apache Struts方网站;

    http://struts.apache.org/    下载最新的包;

    http://people.apache.org/builds/struts/  下载历史版本的包

    在官网下载好  struts-2.3.24-all.zip 之后;

    解压这个文件,解压之后是五个压缩文件:

    struts2-blank.wa;r struts-mailreader.war; struts-porlter.wa;r struts2-rest-showcase.war; struts-showcase.war。

    在myeclipse中配置struts;

    1.先把struts-blank 解压出来,

    (1)

      1.1找到里面lib文件夹下的jar,再在自己项目中创建lib文件夹,把这些jar复制进去。,在budlidpath -> add buildpath 。加载jar的操作就完成了

      1.2还可以在myeclipse里创建类库;1.选择Java下的Build Path下2.选择Uer Library ,单击右边的new按钮。 3.在弹出的对话框中输入用户自定义包的名字。 4.选择建好的类库,单击右边的Add jars导入自定义的包,这里可以一次导入多个.jar文件 导入完成后。

      然后再在工程里导入我们自定义的类库,步骤1.在项目右键点击properties => bulid path =>  add usrlibery => use libery 选中刚才创建好的类库

    (2)还要把空项目下的src的struts.xml复制到,我们项目下的src目录下,把package中的内容删了,还有后面的内容也删了。

    (3)还有就是web.xml文件;主要是在web.xml 加上struts2的过滤器;

    代码如下:

    <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    
    <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>*.action</url-pattern>
    </filter-mapping>
    View Code

    到这里struts2的配置就完成了,很简单。

    接下来讲一下后台的执行流程。

    前台from表单;

    <form action="" method="post"enctype="multipart/form-data">

    </form>

    表单在提交数据的时候以二进制流的形势向服务器提交数据;

    struts2在原有的上传解析器继承上做了进一步封装,更近一步简化了文件上传;

    struts2默认使用的是Jakarta和Common-FileUpload的文件上传框架。

    Strut2的Action类:

    (1)类型为File的xxx属性直接封装了上传文件的文件内容。import java.io.File;

    (2)类型为String的XXXFileName这两个属性分别用于封装上传文件的文件名。

    (3)类型为String的xxxContType属性封装了该文件对应的文件类型。

     设置这三个属性。分别给set方法。这样子,就能够获取上传的文件,文件名,文件类型。

    前台页面;

    <%@ page contentType="text/html;charset=utf-8" pageEncoding="UTF-8"%>
    
    <form action="dd.action" method="post"enctype="multipart/form-data">
    <table id="imageupload">
    <tr height="30px" >
    <td colspan="2">
    【上传照片】
    </td>
    </tr>
    <tr>
    <td align="center">选择照片</td>
    <td><input type="file" name="upload" size="50" /></td>
    </tr>
    <tr>
    <td align="center">照片名</td>
    <td><input type="text" name="info" size="50" /></td>
    </tr>
    <tr height="30">
    <td colspan="2" align="center">
    <input type="submit" value="上传" class="btn_bg"/>
    <input type="reset" value="重置" class="btn_bg"/>${result}
    </td>
    </tr>
    </table>
    </form>
    View Code

    这里上传文件域的name属性,要和action的File类型的属性值相同;这样action才能获取文件内容;

    后台处理的action;

    package com.struts.action;
    import java.io.File;
    import java.util.Date;
    
    import org.apache.struts2.ServletActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    import com.yxq.dao.ArticalDao;
    import com.yxq.dao.PhotoDao;
    import com.yxq.valuebean.Model_Artical;
    import com.yxq.valuebean.Model_Photo;
    
    import org.apache.commons.io.FileUtils;
    public class Uploadimg extends ActionSupport {    
        private String info;
        private File upload;
        private String uploadContentType;
        private String uploadFileName;
        private String result;
        public String getResult() {
            return result;
        }
    
        public void setResult(String result) {
            this.result = result;
        }
    
        public File getUpload() {
            return upload;
        }
    
        public void setUpload(File upload) {
            this.upload = upload;
        }
    
        public String getUploadContentType() {
            return uploadContentType;
        }
    
        public void setUploadContentType(String uploadContentType) {
            this.uploadContentType = uploadContentType;
        }
    
        public String getUploadFileName() {
            return uploadFileName;
        }
    
        public void setUploadFileName(String uploadFileName) {
            this.uploadFileName = uploadFileName;
        }
    
        public String getInfo() {
            return info;
        }
    
        public void setInfo(String info) {
            this.info = info;
        }
    
        public String execute()throws Exception{
            String path = ServletActionContext.getServletContext().getRealPath("/userfiles/images");
            File file = new File(path);
            PhotoDao photoDao = new PhotoDao();
            Model_Photo photo =new Model_Photo();
            System.out.print(file.exists());
            if(!file.exists()){
                file.mkdir();
                System.out.println("建立文件夹");
            }
            FileUtils.copyFile(upload, new File(file,uploadFileName));
            try{
                photo.setPhoto_date(new Date());
                photo.setPhoto_Name(info);
                photo.setPhoto_Url(uploadFileName);
                photo.setUser_Id(1);
                boolean d=    photoDao.operationPhoto("upload", photo);
                System.out.print("上传承购与否"+d);
            }catch(Exception e){
                e.printStackTrace();
                System.out.println("获取表单信息出错");
            }
            result="上传成功!";
            return SUCCESS;
            
        }
        
        
        
    }
    View Code

    剩下最后一步了,就是配置struts,

    <action name="dd" class="com.test.action.Fileaction">  //这个class路径是action路径;
    <result name="success">/index.jsp</result>
    <result name="input">/error.jsp</result>
    <interceptor-ref name="fileUpload">
    <!-- 配置拦截器限制上传文件类型及大小 -->
    <param name="allowedTypes">image/bmp,image/x-png,image/gif,image/jpeg</param>
    <param name="maximumSize">2M</param>
    </interceptor-ref>
    <interceptor-ref name="defaultStack"></interceptor-ref>
    </action>
    View Code
  • 相关阅读:
    [Python]执行Linux命令
    [Linux]命令返回值以及错误对照表
    [ERROR]pip insall pyodbc
    [CentOS7]安装ODBC Driver 17 for SQL Server
    [Python]获取字典所有值
    [Python]判断变量类型是否为List列表
    十分钟了解pandas
    Docker容器化技术(上)
    C语言位域
    PAT基础级-钻石段位样卷2-7-7 危险品装箱 (25 分)
  • 原文地址:https://www.cnblogs.com/zht0915/p/4638229.html
Copyright © 2020-2023  润新知