`

Ext5实现html5的拖拽上传功能

阅读更多
这方面网络上的资源有很多,所以直接上代码了。
ext使用SenchaArchitect开发
后台用的jersey



@POST
	@Path("/upload")
	@Consumes(MediaType.MULTIPART_FORM_DATA)
	public Response upload(@NotBlank @FormDataParam("SID") String sid, @NotNull @FormDataParam("size") Long size,
			@NotNull @FormDataParam("dmsFileId") Long dmsFileId, @FormDataParam("file") InputStream fileInputStream,
			@FormDataParam("file") FormDataContentDisposition contentDispositionHeader) {

		try {
			Boolean valid = sessionsService.checkSessionsValid(sid);
			if (valid == null) {
				throw new Exception("session not exist !");
			}
			if (!valid) {
				throw new Exception("session is invalid !");
			}

			// Get Configuration
			String names[] = { "system.dms.upload.destFolder", "system.dms.upload.maxFilesizeInBytes",
					"system.dms.upload.tempFolder", "system.dms.upload.allowed", };
			Map configurations = configurationsService.getSystemConfigurationsByName(names);

			String destFolder = ((Configurations) configurations.get("system.dms.upload.destFolder")).getDefaultvalue();
			Integer tempMaxFilesizeInBytes = Utils.getInteger(
					((Configurations) configurations.get("system.dms.upload.maxFilesizeInBytes")).getDefaultvalue());
			int maxFilesizeInBytes = -1;
			if (tempMaxFilesizeInBytes != null) {
				maxFilesizeInBytes = tempMaxFilesizeInBytes.intValue();
			}
			String tempDir = ((Configurations) configurations.get("system.dms.upload.tempFolder")).getDefaultvalue();
			boolean allowed = "1"
					.equals(((Configurations) configurations.get("system.dms.upload.allowed")).getDefaultvalue());

			// Create Directorys
			File destDirFile = new File(destFolder);
			if (!destDirFile.exists()) {
				destDirFile.mkdirs();
			}

			File tempDirFile = new File(tempDir);
			if (!tempDirFile.exists()) {
				tempDirFile.mkdirs();
			}

			Sessions session = sessionsService.getSessions(sid);
			Long usersId = session.getUserid();

			int maxSize = 1073741824;
			String fileName = contentDispositionHeader.getFileName();

			// Check dmsFileId if exist
			DmsFiles file = dmsFilesService.findById(DmsFiles.class, dmsFileId);
			if (file == null) {
				throw new Exception("DmsFileId is not exist :" + dmsFileId);
			}

			// Check if file size is too big
			if (!((maxFilesizeInBytes == -1 || maxFilesizeInBytes >= size) && size <= maxSize)) {
				throw new Exception("File Upload FAILED. File is too Big : " + size);
			}

			// Check if dest Folder exist and create it if necessary
			destDirFile = new File(destFolder + dmsFilesService.getRelativIdFolderPath(dmsFileId));
			if (!destDirFile.exists()) {
				destDirFile.mkdirs();
			}

			String datapath = destFolder + dmsFilesService.getRelativIdFilePath(dmsFileId);

			if (!destFolder.endsWith("/") && !destFolder.endsWith("\\")) {
				destFolder += "/";
			}

			// save the file to the server
			saveFile(fileInputStream, datapath);

			// Write DmsFile Info TXT for disaster recovery
			RandomAccessFile recorvery_infoFile = new RandomAccessFile(datapath + ".txt", "rw");
			recorvery_infoFile.writeBytes("Org. Filename: " + fileName + "\r\n");
			recorvery_infoFile.writeBytes("Filesize: " + size + "\r\n");
			recorvery_infoFile.writeBytes("Upload Date: " + new Date() + "\r\n");
			recorvery_infoFile.writeBytes("Upload User ID:" + usersId + "\r\n");
			recorvery_infoFile.writeBytes("DMSFile ID : " + dmsFileId + "\r\n");
			recorvery_infoFile.close();

			dmsFilesService.updateFileDataPath(dmsFileId, datapath);
			//update fileSize
			dmsFilesService.mergeFileSize(dmsFileId, size);

			log.info("File Uploaded succesfully with ID " + dmsFileId);
			log.info("File saved to server location : " + datapath);

			return Response.ok("ok").build();

		} catch (Exception e) {
			log.error(ExceptionUtils.getFullStackTrace(e));
			return Response.serverError().entity(e.getMessage()).build();
		}

	}



在最外层的window上添加代码

   onMainViewportAfterRender: function(component, eOpts) {
        //drage and drop file to upload in explorer file win
        window.ondragenter = function(e)
        {
            e.preventDefault();
        };

        window.ondragover = function(e)
        {
            e.preventDefault();
        };

        window.ondrop = function(e)
        {
            e.preventDefault();
        };

        window.ondragleave = function(e)
        {
            e.preventDefault();
        };


         //xxxxxx  

    }


在文件导航window上添加dropFileToUpload方法
{  localStorage.setItem('dmsId',result);
                                var fd = new FormData();
                                fd.append("file", tempfile);
                                fd.append("SID", localStorage.getItem('sid'));
                                fd.append("size", file.size);
                                fd.append("dmsFileId",result);
                                var xhr = new XMLHttpRequest();
                                xhr.upload.addEventListener("progress", function(){
                                    dropUploadProgress.call(controller,arguments);
                                }, false);
                                xhr.addEventListener("load",function(){
                                    var successFileSize = Number(localStorage.getItem("successFileSize"));
                                    var filesSize = Number(localStorage.getItem("filesSize"));
                                    var failedFileSize = Number(localStorage.getItem("failedFileSize"));
                                    successFileSize++;
                                    localStorage.setItem("successFileSize",successFileSize);

                                    if((successFileSize+failedFileSize)==filesSize){
                                        refreshFileList.call(controller,parentnode.data.folderId,arguments);
                                    }else{
                                       dropFileToUpload(file, controller, tree);
                                    }

                                } , false);
                                xhr.upload.addEventListener("error", function(){
                                    var successFileSize = Number(localStorage.getItem("successFileSize"));
                                    var filesSize = Number(localStorage.getItem("filesSize"));
                                    var failedFileSize = Number(localStorage.getItem("failedFileSize"));
                                    failedFileSize++;
                                    localStorage.setItem("failedFileSize",failedFileSize);

                                    dropUploadFailed.call(controller,arguments);

                                    if((successFileSize+failedFileSize)==filesSize){
                                        refreshFileList.call(controller,parentnode.data.folderId,arguments);
                                    }else{
                                       dropFileToUpload(file, controller, tree);
                                    }

                                }, false);
                                xhr.open("POST", "../../../rest/FileExplorerPortal/upload");
                                xhr.send(fd);
}

  refreshFileList: function(folderID, evt) {
        var progressBar = this.getView().lookupReference('dropFileToUploadProgressBar');
        if(progressBar.isVisible()){
               progressBar.hide();
        }
        progressBar.setValue(0);
        progressBar.updateText('0%');

        var successFileSize = Number(localStorage.getItem("successFileSize"));
        var filesSize = Number(localStorage.getItem("filesSize"));
        var failedFileSize = Number(localStorage.getItem("failedFileSize"));
        if(filesSize>1){
            Ext.Msg.show({
               title:'Result',
               message: 'Upload successful:'+successFileSize+" , Upload failed:"+failedFileSize,
               buttons: Ext.Msg.OK
            });
        }else if(failedFileSize==1){
             Ext.Msg.show({
               title:'Error',
               message: 'The file upload failed, please try again...',
               buttons: Ext.Msg.OK
            });
        }

        if(folderID){
            this.getView().lookupReference('FilesList').store.load({params:{folderId:folderID}});
        }

    },

    dropUploadProgress: function(evt) {
        var successFileSize = localStorage.getItem("successFileSize");
        var filesSize = localStorage.getItem("filesSize");


        var progressBar = this.getView().lookupReference('dropFileToUploadProgressBar');
        if (evt[0].lengthComputable) {
            if(!progressBar.isVisible()){
                progressBar.show();
            }
            var percentComplete = Math.round(evt[0].loaded*100 / evt[0].total);
            var filesInfo = "   ("+successFileSize+"/"+filesSize+")";
            progressBar.setValue(percentComplete/100);
            progressBar.updateText(percentComplete+'%'+filesInfo);
        }else {
            progressBar.updateText('Uploding....');
        }
    },

    dropUploadFailed: function(evt) {
        var progressBar = this.getView().lookupReference('dropFileToUploadProgressBar');
        progressBar.setValue(0);
        progressBar.updateText('0%');
        progressBar.hide();
    },



分享到:
评论

相关推荐

    Ext相册实现文件拖拽,实时上传进度,本地预览

    本教程将详细讲解如何利用EXT4、HTML5以及Servlet或Struts2技术栈来实现一个功能强大的相册系统,其中包括文件拖拽上传、实时上传进度显示以及本地预览功能。 **EXT4组件库** EXT4是一个JavaScript框架,用于构建富...

    Ext相册实现文件拖拽,实时上传进度,本地预览(2012-05-14版)

    2012-05-14更新: 增加了通过资源管理器选择文件功能 修复上传进度显示BUG ...图片浏览器支持拖动、双击最大化/还原、更改尺寸 图片浏览器支持对数据源里面的图片进行导航 图片浏览器图片的放大和缩小

    Ext上传文件例子(入门)

    本篇文章将聚焦于"Ext上传文件例子(入门)",通过一个简单的实例来讲解如何在ExtJS框架下实现文件上传功能。 首先,我们要理解文件上传的基本原理。在Web应用中,文件上传通常依赖于HTML的`&lt;input type="file"&gt;`元素...

    EXT2.0中文教程

    9.6. JsonView实现用户卡片拖拽与右键菜单 9.7. 下拉列表选择每页显示多少数据 10. 撕裂吧!邪魔外道与边缘学科。 10.1. dwr与ext整合 10.1.1. 无侵入式整合dwr和ext 10.1.2. DWRProxy 10.1.3. DWRTreeLoader 10.2...

    Drag &amp; Drop file uploader html5

    而HTML5引入了拖放API,使得用户可以直接通过拖拽文件到指定区域来完成上传,提升了用户体验。 HTML5的拖放功能主要由以下几部分构成: 1. **DataTransfer对象**:在拖放操作中,DataTransfer对象存储了与拖放相关...

    Ext 开发指南 学习资料

    9.6. JsonView实现用户卡片拖拽与右键菜单 9.7. 下拉列表选择每页显示多少数据 10. 撕裂吧!邪魔外道与边缘学科。 10.1. dwr与ext整合 10.1.1. 无侵入式整合dwr和ext 10.1.2. DWRProxy 10.1.3. DWRTreeLoader 10.1.4...

    Ext in Action(Ext3.2)

    - **拖拽操作(Drag and Drop)**:Ext JS 提供了完整的拖拽功能支持,开发者可以通过简单的配置实现拖拽效果,如文件上传、列表排序等。 - **插件与扩展**:通过编写插件或扩展现有的组件,可以进一步增强 Ext JS ...

    Ext Js权威指南(.zip.001

    8.3.6 为组件提供拖动功能:ext.util.componentdragger / 421 8.3.7 为组件实现动画功能:ext.util.animate / 422 8.3.8 其他的组件辅助功能类 / 423 8.4 组件的管理 / 423 8.4.1 组件管理及查询:ext....

    Ext类似于flex树插件及调用demo

    - **拖放(Drag and Drop)**:允许用户通过拖动节点在树的不同位置之间移动,实现数据的重新排序或组织。 2. **Flex树与EXTJS TreePanel的相似性**: - **Flex**是Adobe开发的编程语言,用于创建富互联网应用...

    servlet上传下载

    Dropzone是一款JavaScript库,它为网页添加了拖放上传功能,使得用户可以通过拖拽文件到指定区域完成上传操作,大大提升了用户体验。Dropzone库支持预览、进度条显示等功能,同时提供了丰富的配置选项和回调函数,...

    J2EE spring mvc mybatis bootstrap HTML5 后台框架 控制台 mysql版本_spring3.0

    群发邮件,可以发html、纯文本格式,可以发给任意邮箱(实现批量发送广告邮件) 5. 群发or单独 发送短信,支持两种第三方短信商接口 6. spring aop 事物处理 7. 代码生成器 (freemarker), 代码 zip 压缩打包 8. MD5...

    J2EE spring mvc mybatis bootstrap HTML5 后台框架 控制台 oracle版本_spring3.0

    群发邮件,可以发html、纯文本格式,可以发给任意邮箱(实现批量发送广告邮件) 5. 群发or单独 发送短信,支持两种第三方短信商接口 6. spring aop 事物处理 7. 代码生成器 (freemarker), 代码 zip 压缩打包 8. MD5...

    KODExplorer 芒果云-资源管理器

    - 拖动url——创建ext app - 文件管理,树目录变化后(增删改)自动同步到文件列表 - 文件管理,文件列表变化后(增删改)自动同步到树目录 - 中文用户名限制 - 对话框打开关闭动画 - 其他多处优化 ####fix ...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。 +2009-09-27 v2.1.2 -为Tree控件增加GetExpandAllNodesReference和...

    关于JS 的一些特效例子

    5. **拖放功能**:JS支持拖放操作,用户可以通过鼠标拖动元素到指定位置,常见于文件上传或页面布局调整。 6. **计时器与倒计时**:可以创建定时执行的任务,如倒计时,用于活动预告或者验证码过期提醒。 7. **...

    利用imgareaselect辅助后台实现图片上传裁剪

    总结来说,利用`imgareaselect`插件配合服务器端的图片处理技术,可以实现一个完整的图片上传裁剪功能。在兼容性较差的浏览器环境下,这种方案可以确保用户在裁剪过程中获得良好的体验。同时,注意图片的压缩和裁剪...

Global site tag (gtag.js) - Google Analytics