前一段时间项目需求要实现一个多文件上传的问题,项目框架为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的标识。
分享到:
相关推荐
Extjs3.2+struts2.0+spring2.5+hibernate3.5+weblogic10+oracle10g 第4部分
Extjs3.2+struts2.0+spring2.5+hibernate3.5+weblogic10+oracle10g含全包 第三部分
Extjs3.2+struts2.0+spring2.5+hibernate3.5+weblogic10+oracle10g含全包 共5 部分 全部下载后解压缩
Extjs3.2+struts2.0+spring2.5+hibernate3.5+weblogic10+oracle10g含全包 共5 部分 全部下载后解压缩
网上有些这样的例子,但是下了几个都没有跑起来,哎,希望那些发文章的人要发就发全的,别发个半生不熟的。... 现在自己整理了一个Struts2+ExtJS2实现文异步文件上传,没法上传图片无法看到效果,直接上源码吧。
本系统是采用Struts1.3+ExtJS2.2+DWR2.0技术 开发环境:Myeclipse6.0+tomcat6.0+sql server2000 里面有完整的代码! 系统简介: 本系统已经实现了对好友发送即时消息和离线消息,也实现了用户的查询及添加,删除...
总结来说,"Ext + GWT + Struts2.0"的开发模式允许你利用ExtJS的强大UI组件库,GWT的远程服务调用机制,以及Struts2.0的MVC架构,创建一个完整的、高性能的Web应用。这种组合提供了从用户交互、数据处理到服务器端...
本项目“extjs3.2+struts2实现多文件上传excel并插入到数据库”是针对这一需求的具体解决方案,利用了ExtJS 3.2前端框架和Struts2后端框架进行开发。 **ExtJS 3.2** 是一个基于JavaScript的富客户端应用框架,提供...
本项目以"Spring2.5+ibatis2.3+Extjs2.0+Struts2实现用户管理"为主题,旨在为初学者提供一个全面理解这些技术集成使用的实例。下面将详细阐述这四个关键组件及其在用户管理系统中的作用。 首先,Spring框架是Java...
功能强大的Struts2.0+Extjs实现的文件上传,包含文件上传进度,文件的下载,压缩,解压多文件删除等
在"struts+extjs实现UploadDialog"这个主题中,我们主要讨论如何利用Struts和ExtJS来创建一个文件上传对话框。UploadDialog通常是一个交互式的用户界面,允许用户选择本地文件并将其上传到服务器。 首先,让我们从...
此工程 为IntelliJ IDEA 9.0.1编程环境 环境编码UTF-8 weblogic10下发布自动建立数据库表 可参看 applicationContext-hibernate.xml进行配置 proxool_cofig.xml为连接池配置 此项目可做基础项目开发原型方便,启动此...
这是一个基于Java技术栈的Web应用程序开发实例,涵盖了四个核心组件:EXTJS的ext2.1、Struts2.0、Spring2.5以及JDBC,同时也涉及到JSON数据格式的使用。接下来,我们将深入探讨这些技术和它们在项目中的作用。 首先...
**标题:“extjs+spring+struts+hibernate”** **描述:“extjs+spring+struts+hibernate整合实例”** 这个项目是一个综合性的Web应用开发框架整合示例,它结合了ExtJS(一个强大的JavaScript UI库),Spring(一...
标题中的“Extjs+java+swf多文件上传进度条显示项目”是一个综合性的Web开发实践,涉及到前端的用户界面、后端的数据处理以及文件上传过程中进度反馈的实现。这个项目利用了Extjs库来构建用户界面,Java作为服务器端...
这是一个基于Java技术栈,利用MySql5.0作为数据库,结合Web开发框架Struts和前端组件库Extjs2.0构建的图书管理系统。这个系统旨在实现图书馆日常的图书管理、借阅、归还等操作,提供高效且用户友好的界面。 首先,...
在文件批量上传中,ExtJS通常用于创建交互式的文件选择器,允许用户选择多个文件进行上传。它支持拖放操作,可以提供进度条显示上传进度,同时还能处理错误提示和撤销操作。此外,ExtJS的Grid Panel可以用来展示已...
ExtJs + Struts2 + JSON 是一种常见的前端与后端数据交互的技术组合,常用于构建富客户端应用。这里我们详细探讨一下这三个技术组件以及它们如何协同工作。 首先,ExtJs 是一个JavaScript库,用于创建复杂的、用户...