extjs插件开发上传下载文件简单案例
前台,extjs,框架,mybatis,spring,springMVC,简单的文件上传下载案例。
必要的jar包,commons-fileupload-1.3.1.jar,commons-io-2.0.1.jar,commons-lang-2.6.jar
1、extjs前台,文件上传:
上传window。
Ext.ns('Ext.sms')
Ext.sms.BaseRulesUploadWindow=Ext.extend(Ext.Window,{
constructor:function(_config){
if(_config==null){
_config={};
}
Ext.apply(this,_config);
this.uploadPanel=new Ext.FormPanel({
fileUpload : true, //默认为图片上传
id:Ext.id(),
baseCls : 'x-plain',
bodyStyle : 'padding-top:10px;padding-left:0px;',
closealbe : true,
items : [{
labeWidth:40,
xtype : 'textfield',
name : 'file',
inputType : 'file',
allowBlank : false,
width:160,
fieldLabel : '上传'
}]
});
Ext.sms.BaseRulesUploadWindow.superclass.constructor.call(this,{
title:'文件上传',
id:Ext.id(),
modal:true,
height:120,
width:350,
items:[this.uploadPanel]
});
}
});
2、上传的controller方法:
/**
* 方法描述:上传文件到本地
* @param file 要上传的文件
* @param request
* @param response 写出
*/
@RequestMapping("/upload")
public void upload(@RequestParam MultipartFile file,HttpServletRequest request,HttpServletResponse response){
try {
String msg = FileDownLoadUtils.fileUpload(file, request, "/upload/baseRules", 0);
System.out.println(msg);
response.setContentType("text/html;charset=utf-8;");
response.getWriter().write(msg);
response.getWriter().flush();
response.getWriter().close();
} catch (Exception e) {
e.printStackTrace();
}
}
3、静态的文件上传方法:(本方法属于FileDownLoadUtils类)
public static String fileUpload(MultipartFile file, HttpServletRequest request,String saveFolder,long maxSize){
String returnMsg = null;
try {
// 保存的地址
String savePath = request.getSession().getServletContext().getRealPath("/"+saveFolder);
if(maxSize!=0 && file.getSize()>maxSize){
returnMsg = JackJson.fromObjectToJson(new ExtReturn(false, "文件大小超过了"+maxSize/(1024*1024)+"M了,上传失败!"));
return returnMsg;
}
// 上传的文件名 //需要保存
String uploadFileName = file.getOriginalFilename();
// 获取文件后缀名 //需要保存
String fileType = StringUtils.substringAfterLast(uploadFileName, ".");
// 以年月/天的格式来存放
String dataPath = DateFormatUtils.format(new Date(), "yyyy-MM" + File.separator + "dd");
// uuid来保存不会重复
String saveName = UUID.randomUUID().toString().replace("-", "");
// 最终相对于upload的路径,解决没有后缀名的文件 //需要保存
// 为了安全,不要加入后缀名
// \2011-12\01\8364b45f-244d-41b6-bbf4-8df32064a935,等下载的的时候在加入后缀名
String finalPath = File.separator + dataPath + File.separator + saveName + ("".equals(fileType) ? "" : "." + fileType);
logger.debug("savePath:{},finalPath:{}", new Object[] { savePath, finalPath });
File saveFile = new File(savePath + finalPath);
// 判断文件夹是否存在,不存在则创建
if (!saveFile.getParentFile().exists()) {
saveFile.getParentFile().mkdirs();
}
// 写入文件
FileUtils.writeByteArrayToFile(saveFile, file.getBytes());
// 保存文件的基本信息到数据库
StringBuffer buffer = new StringBuffer();
buffer.append("{success:true,fileInfo:{fileName:'").append(uploadFileName).append("',");
buffer.append("filePath:'").append(savePath.replace("\\", "/")+finalPath.replace("\\", "/")).append("',");
buffer.append("projectPath:'").append(saveFolder).append(finalPath.replace("\\", "/")).append("',");
buffer.append("storeName:'").append(saveName + ("".equals(fileType) ? "" : "." + fileType));
buffer.append("'}}");
returnMsg = buffer.toString();
} catch (Exception e) {
logger.error("Exception: ", e);
}
return returnMsg;
}
4、spring-servlet.xml文件中需要配置multipartfile相关的配置:如下
<param-name>upload.enabled</param-name>
<param-value>false</param-value>
</init-param>
《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《《
1、文件下载
基于XTemplate白板的文件下载extjs页面
Ext.ns('Ext.sms')
Ext.sms.BaseRulesReadWindow = new Ext.extend(Ext.Window,{
downloadUrl:ctx+"/baseRulesFile/downLoadFile",
constructor:function(_config){
if(_config==null){
_config={};
}
Ext.apply(this,_config);
Ext.sms.BaseRulesReadWindow.superclass.constructor.call(this,{
width:720,
height:480,
bodyStyle: 'background:white;',
layout:'fit',
autoScroll:true,
modal:true, // 模态窗口
closeAction:'hide',
closable:true,
padding:'5 5 5 5',
buttons:[{
text:'关闭',
scope:this,
handler:function(){
this.hide();
}
}]
});
},
afterRender:function(){
Ext.sms.BaseRulesReadWindow.superclass.afterRender.call(this);
this.initTemplate();
},
initTemplate: function(){
this.noticeTemplate = new Ext.XTemplate('<div class="notice">',
'<div style="text-align:center;font-size: 200%;<h2>{rulesTitle}</h2></div>',
'<div style="text-align:right;padding-right:0.5cm;font-size: 110%;background-color:white"><span>作者:{rulesAuthor}</span> <span>创建时间:{createTime:date("Y-m-d H:i:s")}</span></div>',
'<div style="text-indent:20px;padding: 0.5cm;line-height:150%;font-size: 130%;{rulesContent}</div>',
'<tpl if="fileList != null">',
'<div style="text-indent:20px;padding: 0.5cm;line-height:150%;font-size: 120%;<ul>',
'<tpl for="fileList">',
'<tpl if="downloadPath != null">',
'<li id="li-{[values.fileId]}">附件名称:<a class="noticeFile" href="{[values.downloadPath]}?filePath={[values.filePath]}&fileName={[values.fileName]}&id={[parent.id]}&attachId={[values.fileID]}" target="_self">{[values.fileName]}</a> </li>',
'</tpl>',
'<tpl if="downloadPath == null">',
'<li id="li-{[values.fileId]}">附件名称:<a class="noticeFile" href="'+this.downloadUrl+'?fileId={[values.fileId]}" target="_self">{[values.fileName]}</a> </li>',
'</tpl>',
'</tpl>',
'</ul></div>',
'</tpl>',
'</div>'
);
this.noticeTemplate.compile();
},
loadBaseRules:function(notice){
if(notice==null){
notice={};
}
this.noticeTemplate.overwrite(this.body,notice);
}
})
2、文件下载controller
/**
* 方法描述:下载文件
* @param fileId 要下载的文件,唯一标识
* @param session
* @param response
*/
@RequestMapping(value="/downLoadFile", method = RequestMethod.GET)
public void downLoadFile(String fileId,HttpSession session,HttpServletResponse response){
//获取文件详细信息
BaseRulesFile baseRulesFile = baseRulesFileService.getFileById(fileId);
// 下载
String filePath = session.getServletContext().getRealPath("/");
//下载
FileDownLoadUtils.downloadFile(baseRulesFile.getFilePath(), baseRulesFile.getFileName(), response);
}
3、静态的文件下载方法:(本方法属于FileDownLoadUtils类)
public static void downloadFile(String filePath,String fileName,HttpServletResponse response){
InputStream input = null;
ServletOutputStream output = null;
try {
File downloadFile = new File(filePath);
// 判断文件夹是否存在,不存在则创建
if (!downloadFile.getParentFile().exists()) {
downloadFile.getParentFile().mkdirs();
}
// 判断是否存在这个文件
if (!downloadFile.isFile()) {
// 创建一个
FileUtils.touch(downloadFile);
}
//response.setContentType("application/octet-stream;charset=UTF-8");
response.setContentType("application/x-msdownload");
response.setCharacterEncoding("UTF-8");
// response.setHeader("content-disposition", "attachment; filename=" + URLEncoder.encode(fileName,"UTF-8"));
//解决中文乱码
response.setHeader("Content-Disposition","attachment;filename="+new String(fileName.getBytes("gbk"),"iso-8859-1"));
input = new FileInputStream(downloadFile);
output = response.getOutputStream();
IOUtils.copy(input, output);
output.flush();
} catch (Exception e) {
logger.error("Exception: ", e);
} finally {
IOUtils.closeQuietly(output);
IOUtils.closeQuietly(input);
}
}
4、spring-servlet.xml文件中需要配置multipartfile相关的配置:如下
<param-name>upload.enabled</param-name>
<param-value>false</param-value>
</init-param>
//以上是简单的文件上传下载重点环节
extjs插件开发上传下载文件简单案例的更多相关文章
- Javaweb学习笔记——上传下载文件
一.前言 在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为comm ...
- linux上很方便的上传下载文件工具rz和sz
linux上很方便的上传下载文件工具rz和sz(本文适合linux入门的朋友) ##########################################################&l ...
- 向linux服务器上传下载文件方式收集
向linux服务器上传下载文件方式收集 1. scp [优点]简单方便,安全可靠:支持限速参数[缺点]不支持排除目录[用法] scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ...
- 【liunx命令】上传下载文件的方法
scp 帮助命令: man scp scp功能: 下载远程文件或者目录到本地, 如果想上传或者想下载目录,最好的办法是采用tar压缩一下,是最明智的选择. 从远程主机 下载东西到 本地电脑 ...
- 【WCF】利用WCF实现上传下载文件服务
引言 前段时间,用WCF做了一个小项目,其中涉及到文件的上传下载.出于复习巩固的目的,今天简单梳理了一下,整理出来,下面展示如何一步步实现一个上传下载的WCF服务. 服务端 1.首先新建一个名 ...
- [Linux]非常方便的上传下载文件工具rz和sz
linux上非常方便的上传下载文件工具rz和sz (本文适合linux入门的朋友) [一般用于SecureCRT ssh中使用] █ 法一:直接用yum安装lrzsz(推荐) yum insta ...
- linux使用命令上传下载文件 -- lrzsz
之前都是用Xftp工具在本地和linux系统之间上传下载文件,最近觉得麻烦,因为平时用Xshell连接,要传输文件的时候还要额外使用别的工具,下面是lrzsz的安装和简单的使用过程: 详细的使用可以s ...
- WebSSH画龙点睛之lrzsz上传下载文件
本篇文章没有太多的源码,主要讲一下实现思路和技术原理 当使用Xshell或者SecureCRT终端工具时,我的所有文件传输工作都是通过lrzsz来完成的,主要是因为其简单方便,不需要额外打开sftp之 ...
- Jmeter 上传下载文件
最近很多同学都在问jmeter上传.下载文件的脚本怎么做,要压测上传.下载文件的功能,脚本怎么做,网上查了都说的很含糊,这次呢,咱们就好好的把jmeter的上传下载文件好好缕缕,都整明白了,怎么个过程 ...
随机推荐
- NOI题库
07:机器翻译 总时间限制: 1000ms 内存限制: 65536kB 描述 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 这个翻译软件的原理很简单,它只是从头到尾,依次将每个 ...
- Android视频直播解决方案(rstp、udp)
做局域网视频直播有两种方案,通过rstp或udp协议. 1.rstp协议,网络上有个开源项目,基于Android,且这个项目也是一个服务端,里面也集成了http访问页面,可以通过http或者rstp直 ...
- javaIO(三)
- c# 闭包 小例
class Program { static void fnnn() { string[] k = new string[] { "x", "y", " ...
- 7、8上的cell上的一个按钮,当点击按钮时,要拿到这个cell,可以用代理,也可以用superview
/** cell上的付款按钮事件 */ - (IBAction)paymentButtonClick:(UIButton *)sender { /** * @author SongXing, 15-0 ...
- MySql数据类型详解
可配合http://www.cnblogs.com/langtianya/archive/2013/03/10/2952442.html学习 MySql数据类型 1.整型(xxxint) MySQ ...
- 新浪微博客户端(14)-截取回调地址中的授权成功的请求标记,换取access_token
DJOAuthViewController.m #import "DJOAuthViewController.h" #import "AFNetworking.h&quo ...
- msmms (二) sms与mms 简述!
mms 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . MMS是英文缩写,它可以是Membership Management System的缩写,中文译名为会员管理系统.也可以是M ...
- javascript常用排序算法总结
算法是程序的灵魂.虽然在前端的开发环境中排序算法不是很经常用到,但常见的排序算法还是应该要掌握的.我在这里从网上整理了一下常见排序算法的javascript实现,方便以后查阅. 归并排序: 1 fun ...
- explode 和 implode
<?php $str = "HellooooLAAAAAALleeellll33432ll!"; //字符拆分,当2个“l”并列出现,元素结果是空格“ ”,所有的结果是一维数 ...