struts2+extjs文件上传完整实现(攻克了上传中的各种问题)

版权声明:本文为博主原创文章。未经博主同意不得转载。 https://blog.csdn.net/shanhuhau/article/details/28617999

首先须要引入上传控件

<script type="text/javascript" src="<%=basePath%>/js/ext/examples/ux/fileuploadfield/FileUploadField.js" charset="utf-8"></script>

弹出上传框相应extjs代码


var uploadForm=new Ext.FormPanel({id:'uploadForm',width:520,frame:true,fileUpload: true,  autoHeight:true,bodyStyle:'10px 10px 0px 10px',labelWidth:50,enctype: 'multipart/form-data', defaults:{anchor: '95%',allowBlank: false},items:[{xtype:'fileuploadfield',emptyText: '请选择上传文件...', fieldLabel: '文件:', id:'uploadFile',name: 'upload', allowBlank: false,   blankText: '文件名不能为空.',   buttonCfg: {text: '选择...'// 上传文件时的本地查找按钮}}],buttons: [{text: '上传',handler: function(){if(uploadForm.getForm().isValid()){uploadForm.getForm().submit({url:basePath+ '/documentManage/upload_upload.action',method:'POST',waitTitle: '请稍后',waitMsg: '正在上传文档文件 ...',success: function(fp, action){Ext.MessageBox.alert('信息', action.result.msg);  Ext.getCmp("uploadFile").reset();          // 指定文件字段的id清空其内容addwin.hide();grid.store.load({params:{start : 0,limit : combo.value}});},failure: function(fp, action){Ext.MessageBox.alert('警告', action.result.msg);  addwin.hide();}});}}},{text: '重置',handler: function(){uploadForm.getForm().reset();}}]});addwin = new Ext.Window({title : '上传新文档',closable : true,width : 520,autoHeight: true,border : false,plain : true,modal : true,layout : 'fit',bodyStyle : 'padding:5px;',maximizable : false,// 禁止最大化closeAction : 'hide',closable : true,// 是否有关闭collapsible : true,// 可折叠iconCls : 'bind',items : [uploadForm]
});




struts2 action代码

package cn.com.action;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import cn.com.css.common.action.BaseAction;public class FileUploadAction extends BaseAction {private static final long serialVersionUID = 5156288255337069381L;private  String msg;private String contentType;private File docmentFile;private String fileName;public String upload() throws Exception {String realPath = "E:\\" + fileName;if (docmentFile.isFile()) {BufferedInputStream bis = new BufferedInputStream(new FileInputStream(docmentFile));BufferedOutputStream bos = null;try {bos = new BufferedOutputStream(new FileOutputStream(realPath));// 为以防万一,以后写文件的路径尽量写成正双斜杠的// 从源文件里取数据,写到目标文件里byte[] buff = new byte[8192];for (int len = -1; (len = bis.read(buff)) != -1;) {bos.write(buff, 0, len);}bos.flush();} catch (IOException ie) {ie.printStackTrace();msg="文件上传失败";HttpServletResponse response = ServletActionContext.getResponse();response.setContentType("text/html;charset=UTF-8");return "none";} finally {if (bis != null) {try {bis.close();} catch (IOException ie) {ie.printStackTrace();}}if (bos != null) {try {bos.close();} catch (IOException ie) {ie.printStackTrace();}}}}msg="文件上传成功";HttpServletResponse response = ServletActionContext.getResponse();response.setContentType("text/html;charset=UTF-8");return "none";}public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}// since we are using <s:file name="upload" .../> the file name will be// obtained through getter/setter of <file-tag-name>FileNamepublic String getUploadFileName() {return fileName;}public void setUploadFileName(String fileName) {this.fileName = fileName;}// since we are using <s:file name="upload" ... /> the content type will be// obtained through getter/setter of <file-tag-name>ContentTypepublic String getUploadContentType() {return contentType;}public void setUploadContentType(String contentType) {this.contentType = contentType;}// since we are using <s:file name="upload" ... /> the File itself will be// obtained through getter/setter of <file-tag-name>public File getUpload() {return docmentFile;}public void setUpload(File docmentFile) {this.docmentFile = docmentFile;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public String getContentType() {return contentType;}public void setContentType(String contentType) {this.contentType = contentType;}public File getDocmentFile() {return docmentFile;}public void setDocmentFile(File docmentFile) {this.docmentFile = docmentFile;}}



struts.xml配置:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""http://struts.apache.org/dtds/struts-2.0.dtd">
<struts><package name="documentManage" namespace="/documentManage"extends="global-struts-default"><action name="upload_*"class="cn.com.FileUploadAction"method="{1}"><result type="json" name="none"><param name="contentType">text/html;charset=utf-8</param><param name="excludeProperties">user.myQuestionses,user.messages,user.myNotes,user.taskPapers,user.tasks,user.testPapers,user.articles</param></result></action></package>
</struts>



转载于:https://www.cnblogs.com/mqxnongmin/p/10619014.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

放大镜制作(1)

放大镜制作 <div class"box" id"box"><!--左侧的盒子--><div class"small"><!--图片--><img src"images/big.jpg" width"350" class"aaa" alt""/><!--黄色小盒子--&…

.NET Framework 2.0 组件和非托管代码与交互操作详解(转)

.NET Framework 将促进与 COM 组件、COM 服务、外部类型库和许多操作系统服务的交互操作。在托管和非托管对象模型之间&#xff0c;数据类型、方法签名和错误处理机制都存在差异。为了简化 .NET Framework 组件和非托管代码之间的互用并便于进行移植&#xff0c;公共语言运行时…

git 删除远程分支和本地分支

删除远程分支和本地分支 https://www.cnblogs.com/luosongchao/p/3408365.html 将远程git仓库里的指定分支拉取到本地&#xff08;本地不存在的分支&#xff09; https://www.cnblogs.com/hamsterPP/p/6810831.html 转载于:https://www.cnblogs.com/mafeng/p/10619419.html

从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装

标题&#xff1a;从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装 作者&#xff1a;Lamond Lu 地址&#xff1a;https://www.cnblogs.com/lwqlun/p/11343141.html 源代码&#xff1a;https://github.com/lamondlu/Mystique 前情回顾 从零开始实现ASP.NET Core MVC的插…

立体导航翻转案例

<div class"box"><!-- 立方体 --><ul><li><img src"img1/1.jpg" alt""></li><li><img src"img1/2.jpg" alt""></li><li><img src"img1/3.jpg" a…

Uncontrolled memory mapping in camera driver (CVE-2013-2595)

版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主同意不得转载。https://blog.csdn.net/hu3167343/article/details/34434235 /* 本文章由 莫灰灰 编写&#xff0c;转载请注明出处。 作者&#xff1a;莫灰灰 邮箱&#xff1a; minzhenfei163.com */ 1漏洞描写…

表格隔行变色

<body><table border"0" align"center" cellspacing"1" cellpadding"0"><caption>恭喜发财</caption><thead><tr><th>代码</th><th>名称</th><th>最新公布净值<…

启动Cognos时报0106错误

1. 问题描述 启动Cognos失败&#xff0c;报错代码为0106。 2. 问题分析 是jdk版本不兼容。 3. 解决方案 方案一&#xff1a;更换jdk1.6&#xff0c;可以使用免安装版&#xff0c;不需要卸载原有的jdk将java_home的路径替换成jdk1.6的路径。 方案二&#xff1a;使用Cognos自带jd…

项目管理的测试版发布

最近有时间将以前没有写完的项目管理程序进一步完善&#xff0c;加入了项目任务之间的关连。功能&#xff1a;1、任务的关连Start to finishStart to startFinish to startFinish to finish2、任务关连表环路检测3、采用MVC模式进行开发4、自动导出XML5、双击连接线可以设置、删…

剑指offer.机器人的运动范围

地上有一个 m 行和 n 列的方格&#xff0c;横纵坐标范围分别是 0∼m−1 和 0∼∼n−1。一个机器人从坐标0,0的格子开始移动&#xff0c;每一次只能向左&#xff0c;右&#xff0c;上&#xff0c;下四个方向移动一格。但是不能进入行坐标和列坐标的数位之和大于 kk 的格子。请问…

Tab栏切换布局分析

<body><div class"tab"><div class"tab_list"><ul><li class"current">商品介绍</li><li>规格与包装</li><li>售后包装</li><li>商品评价(50000)</li><li>手机社…

CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码

CLR是Common Language Runtime的缩写&#xff0c;是.NET程序集或可执行程序运行的一个虚拟环境。CLR用于管理托管代码&#xff0c;但是它本身是由非托管代码编写的&#xff0c;并不是一个包含了托管代码的程序集&#xff0c;所以不能使用IL DASM进行查看&#xff0c;但CLR以dll…

表单的全选取消全选

<div class"wrap"><table border"1" cellspacing"0" cellpadding"0"><caption>恭喜发财</caption><thead><tr><th><input type"checkbox" id"j_cbAll" checked&quo…

VUE 数据绑定模块渲染 computed(实现通过路由id 查询数据json结构,对应的值来放在面包屑中)...

异步请求的值放在vuex中&#xff0c;然后页面挂载该数据和渲染页面 computed 计算属性是基于它的依赖缓存的。计算属性在它的相关依赖发生改变时会重新取值&#xff0c;所以当ajax请求回来的数据发生变化时&#xff0c;计算属性的值会进行更新&#xff0c;相关的模板引用也会重…

ThinkJs笔记琐碎

ThinkJs笔记琐碎 记录一些琐碎的在使用ThinkJs遇到的问题 静态资源访问 ThinkJs默认production环境关闭对www下资源的相对路径的访问&#xff0c;官方建议通过nginx转向的地址的绝对路径访问&#xff0c;想要在production环境访问相对路径的话需要到src/config/middleware.js里…

js(Dom+Bom)第二天(1)

JavaScript-DOM操作 核心知识点 className操作标签样式style属性方式操作标签样式操作表单控件 学习目标 能够通过className方式给标签设置样式能够通过style方式给标签设置样式能够获取表单控件中的值 操作元素样式 语法&#xff1a;1.dom.className 类名;2.dom.style.属…

HDU 4339 Query

算法: 比赛时没有想到好的算法&#xff0c;暴力是O&#xff08; Q * N &#xff09;肯定超时。 赛后&#xff0c;线段树&#xff0c;树状数组&#xff0c;HASH都能AC&#xff0c;想了下&#xff0c;的确用树状数组 时间复杂度就可以优化到O&#xff08;Q * lgN * lgN) 2000msAC…

201904快速阅读术

在看过了几本数之后&#xff0c;发现原来培养读书的习惯好像也不太难&#xff0c;“将读书融入生活&#xff0c;框定读书时间” 生活中&#xff0c;我确实也是这样执行了。利用每天上下班的时间听书&#xff0c;有些觉得可以读快的书籍用了1.5倍速度在听&#xff0c;难懂的部分…

js(Dom+Bom)第二天(2)

webAPI 00-操作图片 知识点-获取图片src属性 图片对象.src ----> 获取图片路径注意: 1. 获取到的图片路径是一个绝对路径知识点-动态的给图片标签设置路径 图片对象.src 图片路径;注意: 1.可以设置绝对路径(不推荐) 2.可以设置相对路径课堂案例-切换图片案例 01-操作标…

javaScript今日总结

javascript简单介绍ECMAScript 1.语法 2.变量&#xff1a;只能使用var定义&#xff0c;如果在函数的内容使用var定义&#xff0c;那么它是一个局部变量&#xff0c;如果没有使用var它是一个全局的。弱类型&#xff01; 3.数据类型&#xff1a;原始数据类型(undefined/null/stri…