基于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
原文地址:https://www.cnblogs.com/zht0915/p/4638229.html