无论是.net还是Java,我们最常接触到的就是文件的上传和下载功能,在Java里要实现这两个经常使用功能会有非常多种解决方案,可是struts2的框架却能给我们一个比較简单的方式,以下就一起来看吧:

文件上传:

首先来看实现上传功能的表单。Index.jsp:

<span style="font-family:FangSong_GB2312;font-size:18px;"><%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!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=GB18030">
<title>Insert title here</title>
</head>
<body>
<form>
标题:<input type="text" name="title"><br>
文件:<input type="file" name="myFile"><br>
<input type="submit" value="上传">
</form>
</body>
</html></span>

当我们上传成功之后须要一个jsp来显示上传文件的相关信息,所以我们新建一个jsp文件,代码例如以下:

<span style="font-family:FangSong_GB2312;font-size:18px;"><%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!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=GB18030">
<title>Insert title here</title>
</head>
<body>
title:${title }<br>
fileName:${myFileFileName }<br>
</body>
</html></span>

在struts2这个框架中,有了jsp,我们还要使用Action来接受和处理这些数据,也很easy,仅仅是我们要遵守对应的规则:

<span style="font-size:18px;"><span style="font-family:FangSong_GB2312;">package com.bjpowernode.struts2;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream; import com.opensymphony.xwork2.Action; /**
* 文件上传的Action
* @author chao
*
*/
public class UploadTestAction { private String title; //能够得到上传文件的名称
//规则:输入域的名称+固定字符串FileName
private String myFileFileName; //取得文件数据
//规则:File输入域的名称
private File myFile; //取得内容类型
//规则:输入域的名称+固定字符串ContextType
private String myFileContextType; public String getMyFileFileName() {
return myFileFileName;
} public void setMyFileFileName(String myFileFileName) {
this.myFileFileName = myFileFileName;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public File getMyFile() {
return myFile;
} public void setMyFile(File myFile) {
this.myFile = myFile;
} public String getMyFileContextType() {
return myFileContextType;
} public void setMyFileContextType(String myFileContextType) {
this.myFileContextType = myFileContextType;
} public String execute() throws Exception{
//初始化输入流和输出流
InputStream is =null;
OutputStream os = null;
try{
//读入文件
is = new BufferedInputStream(
new FileInputStream(myFile));
//读出文件到既定位置
os = new BufferedOutputStream(
new FileOutputStream("c:\\" + myFileFileName));
//实例化一个byte数组
byte[] buffer = new byte[1024];
int len = 0;
while((len=is.read(buffer)) > 0){
os.write(buffer,0,len);
}
}finally{
if(is != null){is.close();}
if(os != null){os.close();}
}
return Action.SUCCESS;
</pre><pre name="code" class="java">

当jsp和Action都已经具备,我们还要通过配置文件将他们二者联系起来。也就是通过以下的这些代码:

</pre><pre name="code" class="java"><span style="font-family:FangSong_GB2312;font-size:18px;">
</span>
</pre><pre>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"> <struts>
<!--当struts.xml配置文件发生改动。会立马载入。在生产环境下最好不要配置 -->
<constant name="struts.configuration.xml.reload" value="true"/>
<!--设置该配置能够展现更友好的错误提示界面 -->
<constant name="struts2.devMode" value="true"/>
<!--须要继承struts-default包。这样就拥有了最主要的功能 -->
<package name="upload-package" extends="struts-default">
<action name="upload" class="com.bjpowernode.struts2.UploadTestAction">
<result>/success.jsp</result>
</action>
</package>
</struts>
     

这样一来,我们就能够将Action接手到的数据反馈到Index.jsp中;而当我们将信息输入好之后,点击“上传”button。数据又会被传送到Action中,假设上传成功,则会转向到配置文件里的seccess.jsp中。


所以。使用struts2的框架来实现文件的上传功能并不难,主要是利用IO流来实现。看到这里,您有没有想过假设要实现多文件的上传,又该怎样?以下一起来看:

在struts2中,多文件上传和单文件上传原理同样,仅仅是要使用多个<s:file/>标签绑定Action的数组。绑定到数组的Action代码就应该是:

     private File[] uploads;
private String[] uploadFileNames;
private String[] uploadContentTypes; public File[] getUpload() { return this .uploads; }
public void setUpload(File[] upload) { this .uploads = upload; } public String[] getUploadFileName() { return this .uploadFileNames; }
public void setUploadFileName(String[] uploadFileName) { this .uploadFileNames = uploadFileName; }
//上传文件的类型
public String[] getUploadContentType() { return this .uploadContentTypes; }
public void setUploadContentType(String[] uploadContentType) { this .uploadContentTypes = uploadContentType; }
注意:

1、struts2默认採用了apache commons-fileupload

2、struts2支持三种类型的上传组件

3、须要引入commons-fileupload相关的jar包

   * commons-io-1.3.2.jar

   * commnos-fileupload-1.2.1.jar

4、表单中须要採用post提交方式,编码类型须要使用multipart/form-data

5、struts2的Action

   取得文件名---->>>规则:输入域的名称+固定字符串FileName

   取得文件数据---->>>规则:File输入域的名称

   取得内容类型---->>>规则:输入域的名称+固定字符串ContextType

6.得到输入流,採用输出流写文件

使用struts2框架实现文件上传的功能解说就先到这里。希望能够帮到大家!假设大家有什么问题或者更好的建议。欢迎大家指正或者联系我!

笨鸟先飞之Java(一)--使用struts2框架实现文件上传的更多相关文章

  1. struts2框架之文件上传(参考第三天学习笔记)

    上传 1. 上传对表单的要求 * method=post * enctype=multipart/form-data 2. 上传对servlet要求 * getParameter()不能再使用! -- ...

  2. struts2中的文件上传,文件下载

    文件上传: Servlet中的文件上传回顾 前台页面 1.提交方式post 2.表单类型 multipart/form-data 3.input type=file 表单输入项 后台 apache提交 ...

  3. [转]Struts2多个文件上传

    转载至:http://blog.csdn.net/hanxiaoshuang123/article/details/7342091 Struts2多个文件上传多个文件上传分为List集合和数组,下面我 ...

  4. layUI框架中文件上传前后端交互及遇到的相关问题

    下面我将讲述一下我在使用layUI框架中文件上传所遇到的问题: 前端jsp页面: <div class="layui-form-item"> <label cla ...

  5. node.js使用express框架进行文件上传

    关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...

  6. 关于我使用spring mvc框架做文件上传时遇到的问题

    非常感谢作者 原文:https://blog.csdn.net/lingirl/article/details/1714806 昨天尝试着用spring mvc框架做文件上传,犯了挺多不该犯的毛病问题 ...

  7. SpringMVC框架06——文件上传与下载

    1.文件上传 Spring MVC框架的文件上传是基于commons-fileupload组件的文件上传,只不过Spring MVC框架在原有文件上传组件上做了进一步封装,简化了文件上传的代码实现. ...

  8. 基于spring 3.0mvc 框架的文件上传实现

    Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框 ...

  9. Struts2 之 实现文件上传和下载

    Struts2  之 实现文件上传和下载 必须要引入的jar commons-fileupload-1.3.1.jar commons-io-2.2.jar 01.文件上传需要分别在struts.xm ...

随机推荐

  1. VirtualBox 快捷键

    VirtualBox 的 Host 键是哪一个? 默认的 Host = Right Ctrl 组合键,意思是键盘上两个 “Ctrl”中右边的那个.键盘上是没有 “Right”这个键的,刚开始不明白,后 ...

  2. IDEA的注册

    步骤: license server -> 属性 -> 允许作为程序执行文件 即 chmod 777

  3. Guava 源码分析之 Beta, GwtCompatible, GwtIncompatible, Charset, HashCode

    com.google.common.annotations.Beta /** * 表明一个公用API的未来版本是受不兼容变更或删除限制的 * 拥有这个注释标志的API不受任何兼容性保证 * */ @R ...

  4. String类对象的比较

    1.字符串比较,是按照字符串(String)中每一个字符(char)的字段表顺序进行比较 /** * Compares two strings lexicographically(字典序,按照字典顺序 ...

  5. OpenCV 脸部跟踪(2)

          前面一篇文章中提到,我们在一副脸部图像上选取76个特征点,以及这些特征点的连通性信息来描述脸部形状特征,本文中我们会把这些特征点映射到一个标准形状模型.       通常,脸部形状特征点能 ...

  6. 容器list使用之erase(其他容器也通用)

    今天无论如何要写点东西,算是搞清楚了一点东西吧.有点小小的成就感. 之前在程序里面使用了list容器,其中用到了erase()函数,之前一直没出现问题,这两天突然莫名奇妙.花了点时间,搞清楚了eras ...

  7. iOS开发-多线程NSOperation和NSOperationQueue

    上一篇文章稍微提及了一下NSThread的使用,NSThread能直观地控制线程对象,不过需要自己管理线程的生命周期,线程同步,用起来比较繁琐,而且比较容易出错.不过Apple给出了自己的解决方案NS ...

  8. iOS开发-舒尔特表

    周末闲来无事,看一个概念,挺有意思的,舒尔特表,网上也有很多人写过类似的Demo,本人闲来无事也写了一下,舒尔特表听起来很高大上的样子,不过本人的理解就是一个正方形的矩阵中放的各种小格子,可以是字母, ...

  9. android.net.Uri 简介 API

    android.net.Uri 简介 public abstract class android.net.Uri extends Object implements Parcelable, Compa ...

  10. JS 中数组字符串索引和数值索引研究

    先来看一个问题: var array = []; array["a"] = "hello"; array["b"] = "worl ...