Struts2文件上传例子

一、首先搭建Struts框架

第一步:引入Strusts2所必须的jar包

第二步:创建并配置web.xml文件,在其中配置Struts2的核心过滤器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Upload</display-name>
    <!-- Struts2 的框架的核心过滤器的配置 start!! -->
    <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>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <!-- Struts2 end !!-->
</web-app>

第三步:创建Struts.xml文件

二,编写代码

1.首先编写前台上传的表单界面:设置enctype="multipart/form-data"属性

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>简单的文件上传</title>
</head>
<body>
<s:fielderror/>
<s:form action="uploadPro" enctype="multipart/form-data">
<s:textfield name="title" label="文件标题"/><br/>
<s:file name="upload" label="选择文件"/>
<s:submit value="上传"/>
</s:form>
</body>
</html>

2.编写Action类来接收前端传过来的数据

package com.cong.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {

    private static final long serialVersionUID = 1L;
    //封装文件标题请求参数的属性
    private String title;
    //封装上传文件域的属性
    private File upload;
    //封装上传文件类型的属性
    private String uploadContentType;
    //封装上传文件名的属性
    private String uploadFileName;
    //直接在struts.xml文件中配置值的方法
    private String savePath;
    //返回文件保存位置
    public String getSavePath() {
        return ServletActionContext.getServletContext()
                .getRealPath("/"+savePath); //设置上传文件的保存位置
    }
    public void setSavePath(String savePath) {
        this.savePath = savePath;
    }
    //相应setter和getter方法
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    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;
    }

    @Override
    public String execute() throws Exception {
        //文件输入流获取上传的二进制
        FileInputStream fis = new FileInputStream(getUpload());
        //服务器的文件保存地址和源文件名建立上传文件输出流
        FileOutputStream fos = new FileOutputStream(getSavePath()+
                "\\"+getUploadFileName());byte[] buffer = new byte[1024]; //创建一个缓冲字节数组
        int len = 0;
        while ((len = fis.read(buffer)) > 0){  //循环节读取的的字节数据写到服务器文件夹中
            fos.write(buffer, 0, len);
        }
        return SUCCESS;
    }
}

3、配置struts.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <constant name="struts.custom.il8n.resources" value="mess"></constant>
    <!-- 设置应用使用的解码集 -->
    <constant name="struts.il8n.encoding" value="UTF-8"></constant>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />

    <package name="lee" extends="struts-default">

        <action name="uploadPro" class="com.cong.action.UploadAction">
                <!-- 配置fileUpload拦截器 -->
                <interceptor-ref name="fileUpload">
                <!-- 允许上传的文件类型 ,均为图片类型-->
                <param name="allowedTypes">image/jpeg,image/png,image/gif</param>
                <!-- 允许上传的文件大小 -->
                <param name="maximumSize">1024*1024</param>
                  </interceptor-ref>
                <!-- 配置默认拦截器 ,切记!! -->
                 <interceptor-ref name="defaultStack"/>
                <param name="savePath">/images</param> <!--g给savePath属性赋值-->
                <result name="input">index.jsp</result>
                <result>/WEB-INF/content/succ.jsp</result>
        </action>

        <action name="*">
            <result>/WEB-INF/content/{1}.jsp</result>
        </action>
    </package>

</struts>

4.编写succ.jsp文件,上传成功后显示结果界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传成功</title>
</head>
<body>
    上传成功<br/>
    文件标题:<s:property value="title"/><br/> <!--显示传过来的字符串数据-->
    文件为:<img src="${pageContext.request.contextPath}/images/<s:property value="+uploadFileName"/>"/><br/> <!--显示上传的图片-->
</body>
</html>
时间: 2024-10-08 10:28:08

Struts2文件上传例子的相关文章

struts2学习(13)struts2文件上传和下载(1)

一.Struts2文件上传: 二.配置文件的大小以及允许上传的文件类型: 三.大文件上传: 如果不配置上传文件的大小,struts2默认允许上传文件最大为2M: 2097152Byte: 例子实现: com.cy.action.FileUploadAction.java: package com.cy.action; import java.io.File; import org.apache.commons.io.FileUtils; import com.opensymphony.xwork

jfinal初接触,一个简单的文件上传例子

写了个上传的小例子. 从jfinal官网下载jfinal-1.8_demo_for_jsp.zip 然后下载jfinal-1.8-lib.zip 按要求删掉该删除的,引入一些包,之后的项目结构: DemoConfig.java中配置路由,只留下了根路径: /** * 配置路由 */ public void configRoute(Routes me) { me.add("/", CommonController.class); //me.add("/blog", B

struts2 文件上传下载

四.文件的上传(拦截器)和下载(stream结果类型)(需要练一遍) 1.文件上传 必要前提: a.表单method必须是post: b.enctype取值必须是multipart/form-data: c.提供文件选择域. 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib uri="/struts-t

struts2文件上传下载

文件上传 1.struts2中文件上传介绍 struts2文件上传需要使用apache提供的文件上传组件(commons-fileupload.jar和commons-io.jar). struts2文件上传的核心是通过fileupload拦截器实现的. 2.如何实现文件上传 1>.添加commons-fileupload和commons-io包 2>.在jsp页面做如下配置 将form的method属性值设置为post 给form标记添加属性enctype="multipart/f

struts2文件上传突破2M限制

strutsuploadfileactionclass struts配置文件 [html] view plaincopyprint? 1. <action name="FileUpload" class="cn.timefly.strutsTest.FileUploadAction">   2.     <result name="success">/FileUploadResult.jsp</result> 

如何自学Struts2之Struts2文件上传[视频]

如何自学Struts2之Struts2文件上传[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 由于本次视频没有声音,将会在下节课"Struts2数据库访问"这一节课,一起再讲一下. 注意:不好意思,不知道为什么在这次录制过程中没有声音,很抱歉,本节重点是碰到一个空指针异常,原因是fileUpload这个拦截器要放在其他拦截器之前才没有问题,材料

如何自学Struts2之Struts2文件上传和数据库访问[视频]

如何自学Struts2之Struts2文件上传和数据库访问[视频] 之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上: http://pan.baidu.com/s/1kTDsa95 由于上次视频没有声音,所以在这节课"Struts2数据库访问"一起再讲一下.

Struts2 文件上传 进度条显示

参考成功博客:http://blog.sina.com.cn/s/blog_bca9d7e80101bkko.html 待测试博客:http://blog.csdn.net/z69183787/article/details/52536255 Struts2 文件上传 进度条显示

Struts2之struts2文件上传详解

一.学习案例:通过在uploadfile.jsp页面填写完表单,提交后跳转到success.jsp页面,然后验证upload包下上传文件是否成功. 二.案例分析:struts2文件上传并不是表面上看的只需简单配置就可以上传文件.实际是分为两步的.1.struts2首先将客户端上传的文件保存到struts.multipart.saveDir键所指定的目录,如果该键所对应的目录不存在,就会保存到javax.servlet.context.tempdir环境变量所指定的目录中.2.Action中所定义