•Commons-FileUpload组件
–Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目
 
•Commons-FileUpload组件特点
–使用简单:可以方便地嵌入到JSP文件中,编写少量代码即可完成文件的上传功能
–能够全程控制上传内容
–能够对上传文件的大小、类型进行控制
 
•需要下载Common-FileUplaod框架地址(当然MyEclipce中Struts2支持里自带有这两个包):
–下载commons-fileupload-1.2-bin.zip文件
–解压后得到commons-fileupload-1.2.jar
 
–下载commons-io-1.3.2-bin.zip文件
–解压后得到commons-io-1.3.2.jar
 
 

基于表单的文件上传
 

•注意:上面是基于表单的上传,在form标签中有一个必须的属性值设置:enctype.
 
•如果要做文件上传功能必须将enctype值设为multipart/form-data.
 
•此外,文件上传还需要二个JAR文件支持:


文件上传页面upload.jsp(二选一表单即可)
<%@ taglib uri="/struts-tags" prefix="s"%>

    <body>
<form action="uploads" method="post" enctype="multipart/form-data">
文件:
<input type="file" name="uploadImage">
<input type="submit" value="提交">
</form>
或者(两个表单二选一即可)
<s:form action="uploads" method="post" enctype="multipart/form-data">
<s:file name=“uploadImage " label="选择上传的文件" />
<s:submit value="上传" />
</s:form>
</body>
 
Struts2.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 要注意Struts2默认文件上传最大为2M即便你设置了<param name="maximumSize">5242880</param>
  当上传的文件大于2M时候也会出错的这时要设置,另外一个常量
<constant name="struts.multipart.maxSize" value="1000000000"/> --> <package name="Struts2" extends="struts-default" namespace="/"> <action name="uploads" class="com.struts.UploadAction"> <!-- 指定(限制)上传文件的类型,定义局部拦截器,修改默认拦截器的属性
"fileUpload.maximumSize" :限制上传最大的文件大小。
"fileUpload.allowedTypes":允许上传文件的类型。
"fileUpload.allowedExtensions":允许上传文件的可扩展文件类型。 -->
<interceptor-ref name="defaultStack">
<param name="fileUpload.maximumSize">500000000</param>
<param name="fileUpload.allowedTypes">text/plain,application/vnd.ms-powerpoint</param>
<param name="fileUpload.allowedExtensions">.txt,.ppt</param>
</interceptor-ref> <result>/success.jsp</result>
<!-- 出现错误自动会返回input结果,进入结果视图 -->
<result name="input" >/error.jsp</result>
</action>
</package>
</struts>

附加:contentType类型设置

上传Action类UploadAction-简单的保存文件方式
package com.struts;

import java.io.File;
import java.io.IOException; import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { private File uploadImage; //得到上传的文件
private String uploadImageContentType; //得到文件的类型
private String uploadImageFileName; //得到文件的名称 public String execute(){
System.out.println("fileName:"+this.getUploadImageFileName());
System.out.println("contentType:"+this.getUploadImageContentType());
System.out.println("File:"+this.getUploadImage()); //获取要保存文件夹的物理路径(绝对路径)
String realPath=ServletActionContext.getServletContext().getRealPath("/upload");
File file = new File(realPath); //测试此抽象路径名表示的文件或目录是否存在。若不存在,创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
if(!file.exists())file.mkdirs(); try {
//保存文件
FileUtils.copyFile(uploadImage, new File(file,uploadImageFileName));
} catch (IOException e) {
e.printStackTrace();
}
return SUCCESS;
} public File getUploadImage() {
return uploadImage;
} public void setUploadImage(File uploadImage) {
this.uploadImage = uploadImage;
} public String getUploadImageContentType() {
return uploadImageContentType;
} public void setUploadImageContentType(String uploadImageContentType) {
this.uploadImageContentType = uploadImageContentType;
} public String getUploadImageFileName() {
return uploadImageFileName;
} public void setUploadImageFileName(String uploadImageFileName) {
this.uploadImageFileName = uploadImageFileName;
} }

上传成功页面:

  <body>
成功页面. <br>
</body>

上传失败页面:

<!-- 引入struts2的标签库 -->
<%@ taglib uri="/struts-tags" prefix="s"%> <body>
跳转错误页面。。<br>
<!-- fielderror标签输出action的fieldErrors属性保存的字段错误,fieldErrors是一个map类型的属性。 -->
<s:fielderror />
<!-- 生产一个查看debug信息的链接 -->
<s:debug />
</body>
 
 

Struts2文件上传(基于表单的文件上传)的更多相关文章

  1. (25) java web的struts2框架的使用-基于表单的文件上传

    一,首先创建一个表单页面 <body> <form action="uploads" method="post" enctype=" ...

  2. [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  3. (27) java web的struts2框架的使用-基于表单的多文件上传

    和单个文件上传配置都是一样的,只是在action中接受参数时候,接受的是数组,不再是单个的文件. 一,action的实现: public class MutableFilesUpload extend ...

  4. .net c# 提交包含文件file 的form表单 获得文件的Stream流

    1.前台html代码 要写一个有id的form,可是不能有runat="server"属性.由于一个页面中,有这个属性的form表单仅仅能有一个. 再要有一个有name的ifram ...

  5. ajax方式提交带文件上传的表单,上传后不跳转

    ajax方式提交带文件上传的表单 一般的表单都是通过ajax方式提交,所以碰到带文件上传的表单就比较麻烦.基本原理就是在页面增加一个隐藏iframe,然后通过ajax提交除文件之外的表单数据,在表单数 ...

  6. Django的form表单之文件上传

    在生成input标签的时候可以指定input标签的类型为file类型 <!DOCTYPE html> <html lang="en"> <head&g ...

  7. java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例

    java模拟表单上传文件,java通过模拟post方式提交表单实现图片上传功能实例HttpClient 测试类,提供get post方法实例 package com.zdz.httpclient; i ...

  8. Django框架 之 Form表单和Ajax上传文件

    Django框架 之 Form表单和Ajax上传文件 浏览目录 Form表单上传文件 Ajax上传文件 伪造Ajax上传文件 Form表单上传文件 html 1 2 3 4 5 6 7 <h3& ...

  9. php+form表单的文件上传

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

随机推荐

  1. VS常用的配置和插件

  2. 常用jquery插件资料

    fullPage.js 全屏滚动https://github.com/alvarotrigo/fullPage.js Lava Lamp 导航条熔岩灯http://lavalamp.magicmedi ...

  3. 在Linq to Entity 中使用lambda表达式来实现Left Join和Join

    1.读取用户和部门两个表的左连接: var sg = db.Users.GroupJoin(db.Departments, u => u.DepartmentId, d => d.Depa ...

  4. CSRF - 空Referer绕过

    在实际环境中,服务器很多CGI由于一些历史原因,必须允许空Referer的请求.比如:老的客户端版本请求的时候就没有Referer,总不能在服务端一刀切,让老版本的用户都无法正常使用了吧. 这样的CG ...

  5. Goldengate进程的拆分与合并

    Goldengate的拆分与合并分类: ORACLE GoldenGate 2013-10-10 15:22 721人阅读 评论(0) 收藏 举报在使用Goldengate作为复制解决方案时,随着负载 ...

  6. Delphi Android程序启动过程

    Delphi的Android程序是原生的程序,也就是NativeActivity.那么就需要先看一下NativeActivity的原理, 在AndroidManifest.xml文件里面指定入口act ...

  7. C# WinForm 技巧十: 开发工具

    一.摘要   为了开发效率就应该为这个框架开发一个配套工具.来生成固定格式的代码.工具界面如下:   二.数据库整理篇   添加表主键 修改表说明 修改表字段说明 生成数据库文档 导出数据库里相同的字 ...

  8. [JWT] AngularJS Authentication with JWT

    Set up server for JWT Authentication 1. require express 2. require faker: If faker is not install ye ...

  9. linux epoll 开发指南-【ffrpc源码解析】

    摘要 关于epoll的问题很早就像写文章讲讲自己的看法,但是由于ffrpc一直没有完工,所以也就拖下来了.Epoll主要在服务器编程中使用,本文主要探讨服务器程序中epoll的使用技巧.Epoll一般 ...

  10. saiku缓存整理

    使用saiku的人,肯定都有这么一个经历,查询了一次多维分析数据表,第二次之后就特别快,因为它缓存了结果,可问题是过了一天,甚至几天,来源数据早都更换了,可还是这个缓存结果.问题来了,缓存不失效! 那 ...