Struts2实现单文件或多文件上传功能

一、简述

Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>

二、指定用户上传文件的大小,有两种方式

1)默认是在default.properties 文件的 struts.multipart.maxSize=2097152  键值指定为2097152 也就是2M,通过计算 2097152/(1024*1024) = 2 M

那我们可以改变其默认值,只要在src目录下,新建一个 struts.properties 文件,指定上传大小 如下:

一次上传只可以上传10M,不管一次上传多少个文件,按总和计算

2)在struts.xml文件中指定,如图:

其实name就对应struts.properties的键,value对应 值

注意:如果即在struts.properties设定文件上传大小,又在struts.xml 设定文件上传大小,则struts.properties的优先级高于struts.xml,一般在一处指定上传大小即可,推荐 struts.properties

三、Struts2之单文件上传

1.fileupload.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <base href="<%=basePath%>" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" > 

 <title>My JSP 'fileupload.jsp' starting page</title> 

 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
 --> 

 </head> 

 <body>
  <!-- enctype 默认是 application/x-www-form-urlencoded -->
  <form action="FileUpload2" enctype="multipart/form-data" method="post" > 

    用户名:<input type="text" name="usename"> <br/>
    上传文件:<input type="file" name="file1"><br/> 

    <input type="submit" value="提交"/> 

  </form> 

 </body>
</html>

2.具体处理上传的 FileUpload.java

package com.struts2.fileupload; 

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

import org.apache.struts2.ServletActionContext; 

import com.opensymphony.xwork2.ActionSupport; 

/**
 * 单个文件上传
 * @author Administrator
 * 上传文件其实是上传了两份,
 *
 * 首先将上传的文件保存到 default.properties 文件中 struts.multipart.saveDir键指定的目录中
 * 默认是空的
 * 保存在 Tomcat 6.0\work\Catalina\localhost\struts2目录下以.tmp后缀名的文件
 *
 * 如果要在 struts.multipart.saveDir 指定目录, 则可以在 src文件夹下 建一个 struts.properties,
 * 覆盖 default.properties 的某些键值
 *
 * 还有一份是 存放在自己设定的目录下
 */
public class FileUpload extends ActionSupport { 

 private String usename ;
 private File file1 ; //具体上传文件的 引用 , 指向临时目录中的临时文件
 private String file1FileName ; // 上传文件的名字 ,FileName 固定的写法
 private String file1ContentType ; //上传文件的类型, ContentType 固定的写法 

 public String getUsename() {
  return usename;
 }
 public void setUsename(String usename) {
  this.usename = usename;
 }
 public File getFile1() {
  return file1;
 }
 public void setFile1(File file1) {
  this.file1 = file1;
 }
 public String getFile1FileName() {
  return file1FileName;
 }
 public void setFile1FileName(String file1FileName) {
  this.file1FileName = file1FileName;
 }
 public String getFile1ContentType() {
  return file1ContentType;
 }
 public void setFile1ContentType(String file1ContentType) {
  this.file1ContentType = file1ContentType;
 } 

 @Override
 public String execute() throws Exception {
  //获取文件存储路径
  String path = ServletActionContext.getRequest().getRealPath("/upload");
  //输出流
  OutputStream os = new FileOutputStream(new File(path,file1FileName));
  //输入流
  InputStream is = new FileInputStream(file1); 

  byte[] buf = new byte[1024];
  int length = 0 ; 

  while(-1 != (length = is.read(buf) ) )
  {
   os.write(buf, 0, length) ;
  }
  is.close();
  os.close(); 

  return SUCCESS;
 } 

}

3.最终显示结果的页面,filedemo.jsp

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

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <base href="<%=basePath%>" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" > 

 <title>My JSP 'filedemo.jsp' starting page</title> 

 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
 --> 

 </head> 

 <body>
 上传成功: <br/>
 usename: <s:property value="usename" /><br/>
 file: <s:property value="file1FileName"/><br/>
 contentType: <s:property value="file1ContentType"/> 

 </body>
</html>

四、Struts2之多文件上传

1.fileupload.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <base href="<%=basePath%>" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" > 

 <title>My JSP 'fileupload.jsp' starting page</title> 

 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
 --> 

 </head> 

 <body>
  <!-- enctype 默认是 application/x-www-form-urlencoded -->
  <form action="FileUpload2" enctype="multipart/form-data" method="post" > 

    用户名:<input type="text" name="usename"> <br/>
    上传文件:<input type="file" name="file1"><br/>
    上传文件: <input type="file" name="file1"><br/> <!-- 两个名字相同 都是file1 -->
    <input type="submit" value="提交"/> 

  </form> 

 </body>
</html>

两个上传文件的name属性值要是一样的,后台方便处理

2.具体处理上传文件的FileUpload2.java

多文件上传用集合的方式

package com.struts2.fileupload; 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List; 

import org.apache.struts2.ServletActionContext; 

import com.opensymphony.xwork2.ActionSupport; 

/**
 * 多文件上传,用集合的方式
 * @author Administrator
 *
 */ 

public class FileUpload2 extends ActionSupport { 

 private String usename ;
 private List<File> file1 ;
 private List<String> file1FileName ;
 private List<String> file1ContentType ; 

 public String getUsename() {
  return usename;
 }
 public void setUsename(String usename) {
  this.usename = usename;
 }
 public List<File> getFile1() {
  return file1;
 }
 public void setFile1(List<File> file1) {
  this.file1 = file1;
 }
 public List<String> getFile1FileName() {
  return file1FileName;
 }
 public void setFile1FileName(List<String> file1FileName) {
  this.file1FileName = file1FileName;
 }
 public List<String> getFile1ContentType() {
  return file1ContentType;
 }
 public void setFile1ContentType(List<String> file1ContentType) {
  this.file1ContentType = file1ContentType;
 } 

 @Override
 public String execute() throws Exception { 

  //获取文件存储路径
  String path = ServletActionContext.getRequest().getRealPath("/upload"); 

  for(int i = 0 ; i < file1.size() ; i++ )
  {
   OutputStream os = new FileOutputStream(new File(path,file1FileName.get(i))); 

   InputStream is = new FileInputStream(file1.get(i)); 

   byte[] buf = new byte[1024];
   int length = 0 ; 

   while(-1 != (length = is.read(buf) ) )
   {
    os.write(buf, 0, length) ;
   } 

   is.close();
   os.close(); 

  } 

  return SUCCESS;
 } 

}

3.用于显示的界面filedemo.jsp

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

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
 <head>
 <base href="<%=basePath%>" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" > 

 <title>My JSP 'filedemo2.jsp' starting page</title> 

 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >
 --> 

 </head> 

 <body>
    上传成功:<br/>
  usename:<s:property value="usename"/><br/>
    <!-- 遍历值 -->
    <s:iterator value="file1FileName" id="f"> <!-- id是一个对象,目前是一个字符串集合 可任意命名 -->
             文件:<s:property value="#f"/> <br/>
    <!-- 这里也可以调用方法 <s:property value="#f.toUpperCase()"/> -->
    </s:iterator> 

 </body>
</html>

遍历集合的方式,用struts2提供的标签 iterator 可以实现

<s:iterator value="file1FileName" id="f"> <!-- id是一个对象,目前是一个字符串集合 可任意命名-->
    文件:<s:property value="#f"/> <br/>
    <!-- 这里也可以调用方法 <s:property value="#f.toUpperCase()"/> -->
    toUpperCase()字符串的方法是把字母转为大写
</s:iterator>

下载链接:

1)Servlet 文件上传  点击打开链接
2)Struts2之下载  点击打开链接

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • struts2实现多文件上传的示例代码

    开发环境JDK1.8 eclipse struts2-2.3.31 1.创建web项目 2.导入struts2核心jar包 3.更改web.xml配置文件(只要配置好struts2的Filter就好) 4.创建src/struts.xml文件 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD

  • Struts2实现文件上传功能实例解析

    一. 搭建struts2环境 在myeclipse下,右击项目->MyEclipse->Project Facets->install Apache Struts2. 如要自己搭建,需下载struts2包,写struts.xml配置文件. web.xml文件配置如下: <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher

  • java中struts2实现文件上传下载功能

    先谈一谈struts2实现文件的上传和下载实例实现的原理: Struts 2是通过Commons FileUpload文件上传. Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中.从而我们就能够以本地文件方式的操作浏览器上传的文件. 具体实现: 一.创建index.jsp页面 <body> <s:form action="upload" method="p

  • Struts2 文件上传进度条的实现实例代码

    最近在写我们大三项目的一个视频文件上传的页面,实现后台对上传的进度进行监听,然后将监听的信息返回给前台页面. 前台的页面效果图: 前台进度条控件选择使用easyui 的progressbar控件. 详细的使用说明参考官网文档:http://www.jeasyui.com/documentation/index.php 所有需要引入jquery-1.11.1.min.js 以及jquery.easyui.min.js 一.前台的代码: <%@ page language="java"

  • JavaWeb中struts2实现文件上传下载功能实例解析

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

  • java中struts2实现简单的文件上传与下载

    一.Struts2文件上传  Struts2的文件上传实现非常简单,只需要简单几步就可完成: 注意: (1)文件上传的struts2标签为:<s:file name="" label="上传"/> (2)文件上传的前提是表单属性method="post" enctype="multipart/form-data"; (3)web应用中必须包含common-fileupload.jar和common-io.jar,因

  • JavaEE中struts2实现文件上传下载功能实例解析

    本文实例为大家分享了struts2实现文件上传下载的具体实现代码,供大家参考,具体内容如下 一.文件上传 struts提交的文件组件上传, 前台: 1).提交方式POST 2).表单类型 multipart/form-data 3).input type=file 后台: Apache提供的FileUpload组件 核心类: FileItemFactory FileItem的工厂 ServletFileUpload servlet 中的文件上传的核心类 FileItem 封装了上传的表单文件项的

  • golang gin框架实现大文件的流式上传功能

    目录 upload.html gin_stream_upload_file.go 一般来说,通过c.Request.FormFile()获取文件的时候,所有内容都全部读到了内存.如果是个巨大的文件,则可能内存会爆掉:且,有的时候我们需要一边上传一边处理.以下的代码实现了大文件流式上传.还非常不完美,但是可以作为参考: upload.html <!DOCTYPE html> <html lang="en"> <head> <meta charse

  • python中watchdog文件监控与检测上传功能

    引言 上一篇介绍完了观察者模式的原理,本篇想就此再介绍一个小应用,虽然我也就玩了一下午,是当时看observer正好找到的,以及还有Django-observer,但Django很久没用了,所以提下这个作为一个笔记. watchdog介绍 Watchdog的中文的"看门狗",有保护的意思.最早引入Watchdog是在单片机系统中,由于单片机的工作环境容易受到外界磁场的干扰,导致程序"跑飞",造成整个系统无法正常工作,因此,引入了一个"看门狗",对

  • Struts2实现单文件或多文件上传功能

    一.简述 Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/> 二.指定用户上传文件的大小,有两种方式 1)默认是在default.properties 文件的 struts.multipart.maxSize=20

  • AjaxFileUpload+Struts2实现多文件上传功能

    本文重点给大家介绍AjaxFileUpload+Struts2实现多文件上传功能,具体实现代码大家参考下本文. 单文件和多文件的实现区别主要修改两点, 一是插件ajaxfileupload.js里接收file文件ID的方式 二是后台action是数组形式接收 1.ajaxFileUpload文件下载地址http://www.phpletter.com/Demo/AjaxFileUpload-Demo/ 2.引入jquery-1.8.0.min.js.ajaxFileUpload.js文件 3.文

  • Struts2实现文件上传功能

    Servlet 3.0规范的HttpServletRequest已经提供了方法来处理文件上传但这种上传需要在Servlet中完成.而Struts2则提供了更简单的封装. Struts2默认使用的是Jakarta的Common-FileUpload的文件上传框架,因此使用Struts2的文件上传功能,则需要添加两个jar包,即commons-io-2.2.jar和commons-fileupload-1.3.1.jar. Struts2简单文件上传示例: 1.文件上传页面 为了能上传文件,表单的m

  • asp.net单文件带进度条上传的解决方案

    最近做项目中遇到很多问题,比如带进度条的文件上传,看了网上很多资料还没找到真正意义上的ASP.NET实现进度条上传(可能是我没找到),下面我来跟大家分享一下我实现的这个程序. 首先看下界面效果,当然你可以完全修改界面为你自己所用. 先解释一下这个程序,该程序采用了jquery框架,实现了小文件上传,不超过80Mb,可以在web.config文件中进行相应的配置,但是有个最大值,具体需要查看msdn.开发环境采用visual studio 2013 .net framework 4.5,运行的时候

  • 使用jQuery.form.js/springmvc框架实现文件上传功能

    使用的技术有jquery.form.js框架, 以及springmvc框架.主要实现异步文件上传的同时封装对象,以及一些注意事项. 功能本身是很简单的,但是涉及到一些传递参数类型的问题.例如:jquery的ajax方法与jquery.form.js中的ajaxSubmit方法的参数,具体细节将在下一篇博客中分享. 重点: html表格三要素: action="fileUpload/fileUpload" method="post" enctype="mul

  • Spring实现文件上传功能

    本篇文章,我们要来做一个Spring的文件上传功能: 1. 创建一个Maven的web工程,然后配置pom.xml文件,增加依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.0.2.RELEASE</version> </dep

  • 配置php.ini实现PHP文件上传功能

    昨天分享了在PHP网站开发中如何在php.ini中配置实现session功能的PHP教程,今天继续分享在利用PHP实现文件上传功能时几点关键php.ini的配置. 说到在php.ini中的文件上传的配置,其实在之前介绍PHP文件上传功能代码实例教程以及Jquery AjaxUpload实现文件上传功能代码实例教程时我都有所提及.PHP文件上传功能配置主要涉及php.ini配置文件中的upload_tmp_dir.upload_max_filesize.post_max_size等选项. php.

  • php轻松实现文件上传功能

    本文分为五个部分针对php上传文件进行分析讲解,具体内容如下 文件上传变量 将服务器上的临时文件移动到指定目录下 php.ini上传相关配置 error错误号 单文件上传实例 1.文件上传变量 //$_FILES:文件上传变量 #name 文件的名称 #type 文件的类型 #tmp_name 临时文件名 #size 文件的大小 #error 错误信息 $filename = $_FILES["myFile"]["name"]; $type = $_FILES[&q

随机推荐