这方面网络上的资源有很多,所以直接上代码了。
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();
},
分享到:
相关推荐
本教程将详细讲解如何利用EXT4、HTML5以及Servlet或Struts2技术栈来实现一个功能强大的相册系统,其中包括文件拖拽上传、实时上传进度显示以及本地预览功能。 **EXT4组件库** EXT4是一个JavaScript框架,用于构建富...
2012-05-14更新: 增加了通过资源管理器选择文件功能 修复上传进度显示BUG ...图片浏览器支持拖动、双击最大化/还原、更改尺寸 图片浏览器支持对数据源里面的图片进行导航 图片浏览器图片的放大和缩小
本篇文章将聚焦于"Ext上传文件例子(入门)",通过一个简单的实例来讲解如何在ExtJS框架下实现文件上传功能。 首先,我们要理解文件上传的基本原理。在Web应用中,文件上传通常依赖于HTML的`<input type="file">`元素...
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...
而HTML5引入了拖放API,使得用户可以直接通过拖拽文件到指定区域来完成上传,提升了用户体验。 HTML5的拖放功能主要由以下几部分构成: 1. **DataTransfer对象**:在拖放操作中,DataTransfer对象存储了与拖放相关...
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...
- **拖拽操作(Drag and Drop)**:Ext JS 提供了完整的拖拽功能支持,开发者可以通过简单的配置实现拖拽效果,如文件上传、列表排序等。 - **插件与扩展**:通过编写插件或扩展现有的组件,可以进一步增强 Ext JS ...
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....
- **拖放(Drag and Drop)**:允许用户通过拖动节点在树的不同位置之间移动,实现数据的重新排序或组织。 2. **Flex树与EXTJS TreePanel的相似性**: - **Flex**是Adobe开发的编程语言,用于创建富互联网应用...
Dropzone是一款JavaScript库,它为网页添加了拖放上传功能,使得用户可以通过拖拽文件到指定区域完成上传操作,大大提升了用户体验。Dropzone库支持预览、进度条显示等功能,同时提供了丰富的配置选项和回调函数,...
群发邮件,可以发html、纯文本格式,可以发给任意邮箱(实现批量发送广告邮件) 5. 群发or单独 发送短信,支持两种第三方短信商接口 6. spring aop 事物处理 7. 代码生成器 (freemarker), 代码 zip 压缩打包 8. MD5...
群发邮件,可以发html、纯文本格式,可以发给任意邮箱(实现批量发送广告邮件) 5. 群发or单独 发送短信,支持两种第三方短信商接口 6. spring aop 事物处理 7. 代码生成器 (freemarker), 代码 zip 压缩打包 8. MD5...
- 拖动url——创建ext app - 文件管理,树目录变化后(增删改)自动同步到文件列表 - 文件管理,文件列表变化后(增删改)自动同步到树目录 - 中文用户名限制 - 对话框打开关闭动画 - 其他多处优化 ####fix ...
-Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。 +2009-09-27 v2.1.2 -为Tree控件增加GetExpandAllNodesReference和...
- Extjs提供了丰富的动画效果,可以通过`Ext.Fx`和`Ext.Element`类实现。 - 动画效果包括淡入淡出、滑动、缩放等。 - **Ext.Fx类** - 提供了一组高级的动画效果,支持复杂的动画序列。 - 例如创建一个淡入效果...
5. **拖放功能**:JS支持拖放操作,用户可以通过鼠标拖动元素到指定位置,常见于文件上传或页面布局调整。 6. **计时器与倒计时**:可以创建定时执行的任务,如倒计时,用于活动预告或者验证码过期提醒。 7. **...
总结来说,利用`imgareaselect`插件配合服务器端的图片处理技术,可以实现一个完整的图片上传裁剪功能。在兼容性较差的浏览器环境下,这种方案可以确保用户在裁剪过程中获得良好的体验。同时,注意图片的压缩和裁剪...