本文介绍两种:上传文件到server的方式

  一种是提交Form表单;还有一种是ajaxfileupload异步上传。



一、JSP中:

    1、提交Form表单

为了能完毕文件上传,我们应该将这两个表单域所在表单的enctype属性设置为multipart/form-data。

		<form action="uploadFiles_fourInsuranceFirstUpload.action" method="post" enctype="multipart/form-data">
文件标题:<input type="text" name="title" /><br>
选择文件:<input type="file" name="upload" /><br>
<input value="上传" type="submit" />
</form>

    2、ajaxfileupload异步上传

      <script src="${pageContext.request.contextPath}/script/jquery.js" type="text/javascript"></script>
<script src="${pageContext.request.contextPath}/script/ajaxfileupload.js" type="text/javascript"></script><pre name="code" class="javascript"> <script type="text/javascript" language="javascript">
//上传附件
function uploadFile() { $.ajaxFileUpload( {
url : 'tenantCredit_uploadFile.action', //你处理上传文件的服务端
type : 'post',
secureuri : false,
fileElementId : 'fileUpload',
dataType : 'text',
success : function(data) {
if (data == "true") {
alert("上传文件成功!");
} else {
alert("上传失败! " );
}
}
})
}
</script>
<input type="file" id="fileUpload" name="upload" value="上传" />
<input type="button" id="btnUploadFile" onclick="javascript:uploadFile();" value="保存记录"/>

二、Action中该怎样获取文件呢?

upload属性分别相应前面的表单域的upload属性。用于封装表单域的请求參数。

Action中包括了两个属性:

     uploadFileName:封装上传文件的文件名称

     uploadContentType:封装上传文件的文件类型。

Action类直接通过File类型属性直接封装了上传文件的文件内容,但这个File属性无法获取上传文件的文件名称和文件类型,所以Struts2直接将文件域中包括的上传文件名称和文件类型的信息封装到uploadFileName和uploadContentType属性中。

能够觉得:假设表单中包括一个name属性为xxx的文件域,则相应Action须要使用三个属性来封装该文件域的信息:

类型为File的xxx属性封装了该文件域相应的文件内容。(文中的 File upload属性中的upload就是以下两个string的属性的前缀)    

     类型为String的xxxFileName属性封装了该文件域相应的文件的文件名称。

     类型为String的xxxContentType属性封装了该文件域相应的文件的文件名称。

通过上面的三个属性,能够更简单地实现文件上传,所以能够直接通过调用getXxx()方法来获取上传文件的文件名称、文件类型和文件内容。

	// 封装上传文件域的属性
private File upload;
// 封装上传文件类型的属性
private String uploadContentType;
// 封装上传文件名称的属性
private String uploadFileName;
// 标记上传文件的结果:成功/失败
private String 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 getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
} // 上传附件
public String uploadFile() {
try {
String realpath = ServletActionContext.getServletContext().getRealPath("/data"); if (upload != null) {
File savefile = new File(new File(realpath), uploadFileName);
if (!savefile.getParentFile().exists())
savefile.getParentFile().mkdirs();
FileUtils.copyFile(upload, savefile);
ActionContext.getContext().put("message", "文件上传成功");
}
// 提示:上传成功
result = "true";
outPrint(response, result); } catch (Exception e) {
// 提示:上传失败
String result = "false";
outPrint(response, result);
}
return null;
}

三、比較上述两种方式的优缺点:

1.验证是否选中文件:

①提交Form方式:

缺点:假设未选中文件,用JS捕获后return false,也会提交Form!还须要在Action的方法中进行判定。

②Ajax方式:

若未选中文件,用JS进行判定return false,将不会提交Action

2.传递參数的方式

①提交Form方式-2种:

利用ModelDriven属性,在Action中直接获取相应控件的value

或JSP中标识一个id,后在Action中定义此id的get、set方法,就能够直接取到。

②Ajax方式-3种:

同①

或通过JS中url传參的方式

3.接收Action中的返回结果

①提交Form方式:

把返回结果放在值栈/Session中,后再JSP中取出。

②Ajax方式:

同①

或JS回调函数通过data获取Action的返回值。

或JS回调函数通过data获取Action中outPrint

综合上述比較。推荐使用Ajax方式上传文件





工作笔记4.struts2上传文件到server的更多相关文章

  1. 工作笔记——限定input上传文件对话框中能选取的文件的格式

    原文:http://www.dengzhr.com/frontend/1059 input[file]标签的accept属性可用于指定上传文件的 MIME类型 . 例如,想要实现默认上传图片文件的代码 ...

  2. Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法

    Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法 在使用struts2的项目中上传文件的时候出现了一个这样的错误: 2011-7 ...

  3. [JavaWeb基础] 009.Struts2 上传文件

    在web开发中,我们经常遇到要把文件上传下载的功能,这篇文章旨在指导大家完成文件上传功能 1.首先我们需要一个上传文件的页面. <!--在进行文件上传时,表单提交方式一定要是post的方式, 因 ...

  4. 利用struts2上传文件时,如果文件名中含有-符号,那么会出错

    利用struts2上传文件时,如果文件名中含有-符号,那么会出错 报错如下: HTTP Status 500 - C:\Program Files\Apache Software Foundation ...

  5. Android端通过HttpURLConnection上传文件到server

    Android端通过HttpURLConnection上传文件到server 一:实现原理 近期在做Androidclient的应用开发,涉及到要把图片上传到后台server中.自己选择了做Sprin ...

  6. 【要什么自行车】ASP.NET MVC4笔记02:上传文件 uploadify 组件使用

    参考:http://www.cnblogs.com/luotaoyeah/p/3321070.html 1.下载 uploadify 组件,copy至 Content文件夹 <link href ...

  7. struts2上传文件添加进度条

    给文件上传添加进度条,整了两天终于成功了. 想要添加一个上传的进度条,通过分析,应该是需要不断的去访问服务器,询问上传文件的大小.通过已上传文件的大小, 和上传文件的总长度来评估上传的进度. 实现监听 ...

  8. 关于Struts2上传文件的最大Size的设置

    今天使用Struts2的文件上传控件时,在struts.xml中,将处理上传的action中的fileUpload拦截器的maximumSize参数设置为5000000,上传了一个3M的文件后发现控制 ...

  9. 菜鸟学SSH(五)——Struts2上传文件

    上传文件在一个系统当中是一个很常用的功能,也是一个比较重要的功能.今天我们就一起来学习一下Struts2如何上传文件. 今天讲的上传文件的方式有三种: 1,以字节为单位传输文件: 2,Struts2封 ...

随机推荐

  1. 一个关于Java 多线程问题的知识点

    这个程序运行结果会是什么? public class Main {static class ListAdd { private static List list = new ArrayList(); ...

  2. Plain Old Data (POD)

    Plain Old Data (POD) POD指的是这样一些数据类型:基本数据类型.指针.union.数组.构造函数是 trivial 的 struct 或者 class. POD用来表明C++中与 ...

  3. [译]Java8:循环与函数式编程

    Java8函数式编程的加入彻底改变了游戏规则.对Java开发者来说这是一个全新的世界,我们也需要做出相应的改变. 在这篇文章中我们将找寻传统循环代码的可替代方案.Java8的函数式编程特性改变了编程思 ...

  4. Selenium2+python自动化49-判断文本(text_to_be_present_in_element)【转载】

    前言 在做结果判断的时候,经常想判断某个元素中是否存在指定的文本,如登录后判断页面中是账号是否是该用户的用户名. 在前面的登录案例中,写了一个简单的方法,但不是公用的,在EC模块有个方法是可以专门用来 ...

  5. rest_framework 权限流程

    权限流程 权限流程与认证流程非常相似,只是后续操作稍有不同 当用户访问是 首先执行dispatch函数,当执行当第二部时: #2.处理版本信息 处理认证信息 处理权限信息 对用户的访问频率进行限制 s ...

  6. 【转】Android循环滚动广告条的完美实现,封装方便,平滑过渡,从网络加载图片,点击广告进入对应网址

    Android循环滚动广告条的完美实现,封装方便,平滑过渡,从网络加载图片,点击广告进入对应网址 关注finddreams,一起分享,一起进步: http://blog.csdn.net/finddr ...

  7. (十三)MySQL主从复制

    (1)工作原理 (2)主从实现 1) 环境介绍 cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) MySQL版本:5.7 mys ...

  8. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统

    http://www.tuicool.com/articles/NfyqQr 本节主要知识点是easyui 的手风琴加树结构做菜单导航 有园友抱怨原来菜单非常难看,但是基于原有树形无限级别的设计,没有 ...

  9. [转载]JQ 选择器大全[<font color=red>强记忆</font>]

    一.基本选择器  选择器  描 述  返回  示例  #id  根据给定id匹配一个元素  单个元素  $("#test") 选取id为test的元素  .class  根据给定类 ...

  10. Codeforces #439 Div2 E

    #439 Div2 E 题意 给出二维平面,有多个询问: 把某一区域围起来(围墙之间无交点) 移除某一区域的围墙(此时保证围墙一定存在) 选定两个位置问是否可以互相到达 分析 看起来很复杂,其实这道题 ...