`
李成林_89
  • 浏览: 38339 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

使用ExtJs的插件UploadDialog+struts2.0实现多文件上传

阅读更多
前一段时间项目需求要实现一个多文件上传的问题,项目框架为SSH,使用的是ExtJs的一个不是很成熟的插件UloadDialog上查了好多资料,发现好多都是copy有粘贴的内容,都很雷同,其中的一些问题还是要自己才找到答案,现在功能基本实现了,把我的代码贴出来供大家学习使用:
另外:咨询一个问题:使用UploadDialog能否实现一个选多个文件的?如果有哪位朋友实现了,帮忙贴出来供大家学习呀。
1.前台代码
在前台的html代码中只需要引入UploadDialog的包,在引入含下面代码的JS就可以使用了,很简单。
<!--当然,这里的路径要根据你自己放置的UploadDialog.js的路径来确定-->
<script type="text/javascript" src="${webRoot}/scriptLib/ext-3.2.1/Ext.ux.UploadDialog/UploadDialog/UploadDialog.js"></script>
<link rel="stylesheet" type="text/css" href="${webRoot}/ext-3.2.1/Ext.ux.UploadDialog/css/Ext.ux.UploadDialog.css"/>

2.upload.js
function btn_show(){
		var subject = Ext.getCmp('subjectId').getValue();
		var role = Ext.getCmp('roleId').getValue();
		var publicSound = Ext.getCmp('publicSoundId').getValue();
		
		if(subject==""||role==""){
			Ext.MessageBox.alert('提示信息', '请先选择音频科目和角色');
		}else{
			var dialog = new Ext.ux.UploadDialog.Dialog({
					        autoCreate			: true,
							minWidth			: 450,
							minHeight			: 300,
							fileSize			: 10*1024*1024,
					        title				: '文件上传',			//是否自动上传
							permitted_extensions: ['MP3','mp3','MP4','mp4','WMA','wma'],	//允许上传的文件的类型,区分大小写
							closable			: true,     
							collapsible			: false,     
							draggable			: true,       
							proxyDrag			: true,     
							resizable			: true,     
							constraintoviewport	: true, 
							modal				: true,
							reset_on_hide		: false,
							allow_close_on_upload: true,
							url					: 'uploadAudioHandelAction.action',
							base_params			:{
													subjectID		: subject,
													roleID			: role,
													publicSound		: publicSound,
													userName		: userName
								}
				});
			dialog.show('show-button');   
		    dialog.on('uploadsuccess',onUploadSuccess);//定义上传前的回调函数
			dialog.on('uploaderror',onUploadFailed); //定义上传出错回调函数
			dialog.on('fileadd',onFileAdd);//定义添加文件时验证文件的函数
			dialog.on('uploadcomplete',onUploadComplete);//定义所有文件上传完成回调函数
		}	
};

3.行处理的java代码:
package com.dfsoft.lion.process.demo.control.model.dismodel.audio;

import java.io.File;
import java.util.Date;


import com.dfsoft.lion.commons.EagleBaseAction;
import com.dfsoft.lion.domain.demo.measurement.entity.Audio;
import com.dfsoft.lion.domain.demo.measurement.entity.AudioSubjectInfo;
import com.dfsoft.lion.domain.demo.measurement.entity.Role;
import com.dfsoft.lion.domain.demo.measurement.entity.Users;
import com.dfsoft.lion.process.demo.process.model.dismodel.AudioProcess;
import com.dfsoft.lion.process.demo.process.model.dismodel.AudioSubjectInfoProcess;
import com.dfsoft.lion.process.demo.process.model.dismodel.RoleProcess;
import com.dfsoft.lion.process.demo.process.model.dismodel.UsersProcess;


import org.apache.commons.io.FileUtils; 
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;


/**
 * @描述:上传音频处理Action
 * @author lichenglin
 *
 */
public class UploadAudioHandelAction extends EagleBaseAction {

	/**
	 * 
	 */
	private static final long serialVersionUID = 7716496253903888292L;
	
	private Long subjectID ;//科目ID
	private Long roleID ;// 角色ID
	private int publicSound;
	private String userName ;
	private String filesPath;
	//接收文件信息
	private File[] files;  
	private String[] filesFileName;
	private String[] filesContentType;
	
	transient private AudioProcess audioProcess;
	transient private RoleProcess roleProcess;
	transient private AudioSubjectInfoProcess audioSubjectInfoProcess;
	transient private UsersProcess usersProcess;
	transient private GetPath getPath;
	
	public String execute() throws Exception{
		Audio audio = new Audio() ;
		Users users = this.usersProcess.getUserByName("userName", userName);
		AudioSubjectInfo audioSubjectInfo = new AudioSubjectInfo();
		
		HttpServletResponse response = ServletActionContext.getResponse();  
		response.setContentType("text/html;charset=GBK");   
		response.setCharacterEncoding("GBK");
		Role role = this.roleProcess.getRole(roleID);
		/*文件存放路径:为根路径+角色名*/
		String path = getPath.getFilesPath()+"/"+role.getRoleName();
		String filePath = null ; //写入数据库的文件的路径
		double audioSize = 0;    //文件大小
		
		for(int i = 0 ; i < files.length ; i++){            
			File io = new File(path,filesFileName[i]);  
	        try{  
	            /*对文件进行处理*/
	            audioSize = (files[i].length())/1024;//将文件大小从字节数(byte)转化成(KB)为单位
	            filePath = path+"/"+filesFileName[i];
	            /*音频属性*/
	            audio.setAudioName(filesFileName[i]);
	            audio.setAudioSize(audioSize);
	            audio.setDownloads(0);	//初始化下载次数为0
	            audio.setFilePath(filePath);
	            if(publicSound==2){
	            	audio.setIsPublicSound(false);//2表示“否”
//	            	System.err.println("否");
	            }else if(publicSound==1){
	            	audio.setIsPublicSound(true);//1表示“是”
//	            	System.err.println("是");
	            }
	            audio.setRoleID(roleID);		//音频上传人
	            audio.setUploadDate(new Date());//音频上传时间为当前时间
	            audio.setUserID(users.getUserID());
	            
	            /*判断当前音频是否已存在*/
	            Audio temp_audio = this.audioProcess.getAudioByName("audioName",filesFileName[i]);
	            if(temp_audio==null){   //所上传的音频尚不存在
	            	/*上传音频到服务器*/
	            	FileUtils.copyFile(files[i],io);
	            	this.audioProcess.addAudio(audio,subjectID);	            		
            		response.getWriter().write("{success:true,message:'上传新文件成功'}");
	            }else if(temp_audio!=null){
	            	audioSubjectInfo.setAudioID(temp_audio.getAudioID());
	            	audioSubjectInfo.setSubjectID(subjectID);
	            	AudioSubjectInfo temp_auAudioSubjectInfo = this.audioSubjectInfoProcess.getAudioSubjectInfo(audioSubjectInfo);
	            	if(temp_auAudioSubjectInfo==null){
	            		/*该音频已经上传,但未关联该科目,则直接向关系表中添加一条关系数据*/
	            		this.audioSubjectInfoProcess.addAudioSubjectInfo(audioSubjectInfo);
	            		response.getWriter().write("{success:true,message:'上传文件成功'}");
	            	}
	            	else{
	            		/*同音频同科目已经被上传,则不再上传,直接返回false*/
	            		response.getWriter().write("{success:true,message:'该文件已经被上传'}"); 
	            	}
	            }
	        }catch (Exception e) {
	        	response.getWriter().write("{success:false,message:'上传文件失败'}");
	            e.printStackTrace();  
	        }  
		}  
	return NONE;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public void setUsersProcess(UsersProcess usersProcess) {
		this.usersProcess = usersProcess;
	}

	public void setAudioSubjectInfoProcess(
			AudioSubjectInfoProcess audioSubjectInfoProcess) {
		this.audioSubjectInfoProcess = audioSubjectInfoProcess;
	}
	
	public void setRoleProcess(RoleProcess roleProcess) {
		this.roleProcess = roleProcess;
	}

	public Long getSubjectID() {
		return subjectID;
	}
	
	public void setSubjectID(Long subjectID) {
		this.subjectID = subjectID;
	}
	
	public Long getRoleID() {
		return roleID;
	}
	
	public void setRoleID(Long roleID) {
		this.roleID = roleID;
	}
	
	public int getPublicSound() {
		return publicSound;
	}
	
	public void setPublicSound(int publicSound) {
		this.publicSound = publicSound;
	}
	
	public static long getSerialversionuid() {
		return serialVersionUID;
	}
	
	
	public void setAudioProcess(AudioProcess audioProcess) {
		this.audioProcess = audioProcess;
	}
	
	public File[] getFiles() {
		return files;
	}
	
	public String[] getFileFilesName() {
		return filesFileName;
	}
	
	public String[] getFilesContentType() {
		return filesContentType;
	}
	
	public void setFiles(File[] files) {
		this.files = files;
	}
	
	public void setFilesFileName(String[] filesFileName) {
		this.filesFileName = filesFileName;
	}
	
	public void setFilesContentType(String[] filesContentType) {
		this.filesContentType = filesContentType;
	}

	public String getFilesPath() {
		return filesPath;
	}

	public void setFilesPath(String filesPath) {
		this.filesPath = filesPath;
	}

	public void setGetPath(GetPath getPath) {
		this.getPath = getPath;
	}
	
}


当然,其中还有一些其他的参数,请各位在参考的时候灵活些。

另外:注意,在前面dialog生成时,我并没有给他fileName 我尝试过写fileName属性,可是那样会出现java代码中fileName=null的错误,经过多次尝试,我就把那个去掉了,后面实现也没问题了。
还有:java代码中,response返回的字符串是必须的,如果没有写返回,则前面dialog的grid框中总是提示上传错误。因为没有收到success的标识。
0
0
分享到:
评论

相关推荐

    Java-美妆神域_3rm1m18i_221-wx.zip

    Java-美妆神域_3rm1m18i_221-wx.zip

    51单片机的温度监测与控制(温控风扇)

    51单片机的温度监测与控制(温控风扇)

    电赛案例,C++简单的智能家居系统,其中包含了温度监测、光照控制和报警系

    电赛案例,C++简单的智能家居系统,其中包含了温度监测、光照控制和报警系统。该系统可以: 监控室内温度:当温度超过设定阈值时,触发警报。 自动调节光照:根据光线传感器的值自动调节LED灯的亮度。 入侵检测:通过红外传感器检测入侵,并触发警报。

    圣诞树 html版 可修改祝福语

    圣诞树 html版 可修改祝福语。 记事本或vscode编辑html文件:ctrl+F寻找”myLabels“关键词,定位到该处即可修改祝福语

    基于python编写的selenium自动化测试框架,采用PO模式,页面元素采用yaml进行管理资料齐全+详细文档+高分项目+源码.zip

    【资源说明】 基于python编写的selenium自动化测试框架,采用PO模式,页面元素采用yaml进行管理资料齐全+详细文档+高分项目+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    屏幕截图 2024-12-21 170434.png

    屏幕截图 2024-12-21 170434

    基于SpringBoot的学生信息管理系统源码

    基于SpringBoot的学生信息管理系统(前后端源码+数据库+文档+运行截图) 学生信息管理 班级信息管理 教师信息管理 课程信息管理 选课信息管理 考勤信息管理 请假信息管理 成绩信息管理 基于SpringBoot的学生信息管理系统(前后端源码+数据库+文档+运行截图) 学生信息管理 班级信息管理 教师信息管理 课程信息管理 选课信息管理 考勤信息管理 请假信息管理 成绩信息管理基于SpringBoot的学生信息管理系统(前后端源码+数据库+文档+运行截图) 学生信息管理 班级信息管理 教师信息管理 课程信息管理 选课信息管理 考勤信息管理 请假信息管理 成绩信息管理基于SpringBoot的学生信息管理系统(前后端源码+数据库+文档+运行截图) 学生信息管理 班级信息管理 教师信息管理 课程信息管理 选课信息管理 考勤信息管理 请假信息管理 成绩信息管理基于SpringBoot的学生信息管理系统(前后端源码+数据库+文档+运行截图) 学生信息管理 班级信息管理 教师信息管理 课程信息管理 选课信息管理 考勤信息管理

    径向基函数内核 – 机器学习python案例脚本,内核在将数据转换为更高维空间方面发挥着重要作用

    径向基函数内核 – 机器学习 内核在将数据转换为更高维空间方面发挥着重要作用,使算法能够学习复杂的模式和关系。在众多的内核函数中,径向基函数(RBF)内核作为一种多功能且强大的工具脱颖而出。在本文中,我们深入探讨了RBF内核的复杂性,探讨了它的数学公式、直观理解、实际应用及其在各种机器学习算法中的重要性。

    工具变量-中国省级数字经济发展水平面板数据(2012-2022).xlsx

    详细介绍及样例数据:https://blog.csdn.net/samLi0620/article/details/144636765

    51单片机控制的智能小车.7z

    51单片机控制的智能小车.7z

    基于卷积神经网络的数字手势识别安卓APP,识别数字手势0-10详细文档+全部资料+优秀项目+源码.zip

    【资源说明】 基于卷积神经网络的数字手势识别安卓APP,识别数字手势0-10详细文档+全部资料+优秀项目+源码.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    pymssql-2.1.4.dev5-cp37-cp37m-win-amd64.whl pymssql-2.1.4.dev5-cp37-cp37m-win32.whl

    python 使用sqlserver必须要这个问题,没办法,只能满世界的找地方下载,终于让我下载到了,现在分享给大家使用

    四川采矿场生产安全事故管理制度.docx

    四川采矿场生产安全事故管理制度

    简约灰粉共存版_8.0.53.apk

    简约灰粉共存版_8.0.53.apk

    ECharts散点图-全国主要城市空气质量(百度地图).rar

    ECharts散点图-全国主要城市空气质量(百度地图)

    四川采矿场安全检查管理规定.docx

    四川采矿场安全检查管理规定

    JSP基于WEB网上论坛设计与实现(源代码+论文+开题报告+答辩PPT+外文翻译)(2024kt).7z

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;

    空中俯视物体检测9-YOLOv5数据集合集.rar

    空中俯视物体检测9-YOLOv5数据集合集.rar使用YOLO算法从图像中检测对象-V2 2023-05-11 2:51 PM ============================= *与您的团队在计算机视觉项目上合作 *收集和组织图像 *了解和搜索非结构化图像数据 *注释,创建数据集 *导出,训练和部署计算机视觉模型 *使用主动学习随着时间的推移改善数据集 对于最先进的计算机视觉培训笔记本,您可以与此数据集一起使用 该数据集包括1015张图像。 以YOLO V5 PYTORCH格式注释检测对象 - 图像。 将以下预处理应用于每个图像: *像素数据的自动取向(带有Exif-Arientation剥离) *调整大小为640x640(拉伸) 没有应用图像增强技术。

    会使用到的js文件词云图

    词云图

Global site tag (gtag.js) - Google Analytics