工作笔记4.struts2上传文件到服务器
来源:互联网 发布:isnan函数 c语言 编辑:程序博客网 时间:2024/06/08 00:55
本文介绍两种:上传文件到服务器的方式
一种是提交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上传文件到服务器
- 工作笔记4.struts2上传文件到服务器
- jap+java+struts2文件上传到服务器
- struts2上传word文件并保存到服务器上
- struts2 上传图片到服务器
- struts2 文件上传笔记
- struts2文件上传笔记
- 上传文件到服务器
- 上传文件到服务器
- 上传文件到服务器
- 上传文件到服务器
- 上传文件到服务器
- 上传文件到服务器
- 上传文件到服务器
- 上传文件到服务器
- 上传文件到服务器
- 上传文件到服务器
- 上传文件到服务器
- 视图的层次结构
- hdu 5067 Harry And Dig Machine
- Android Eclipse 断点调试技巧
- 二级联动效果实现(在javascript中解析xml文件添加到html(select)中)
- BZOJ 1620: [Usaco2008 Nov]Time Management 时间管理
- 工作笔记4.struts2上传文件到服务器
- 第九周项目5-程序填充题(3)
- ubuntu刻录到U盘
- 傅里叶与图像处理
- POJ1836——Alignment
- 相同的身体
- 程序的执行过程
- YARN(Hadoop)学习笔记(1)
- ICTCLAS2014 Java版本的使用方法