- 浏览: 693909 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (364)
- quick start (57)
- bboss aop (43)
- bboss mvc (48)
- bboss persistent (96)
- bboss taglib (30)
- bboss event (10)
- bbossgroups (52)
- bboss (32)
- bboss会话共享 (17)
- bboss rpc (7)
- bboss 国际化 (5)
- bboss 序列化 (9)
- bboss cxf webservice (8)
- bboss hessian (3)
- bboss 安全认证SSO (15)
- bboss 工作流 (6)
- 平台 (18)
- bboss quartz (3)
- 杂谈 (5)
- 大数据 (1)
- bboss elastic (24)
- bboss http (1)
- bboss kafka (1)
- Elasticsearch Scroll和Slice Scroll查询API使用案例 (1)
最新评论
-
qianhao123:
...
采用gradle构建和发布bboss方法介绍 -
qianhao123:
[img][/img]
采用gradle构建和发布bboss方法介绍 -
yin_bp:
欢迎大家参与working
高性能elasticsearch ORM开发库使用介绍 -
qq641879434:
万分感谢
bboss 持久层sql xml配置文件编写和加载方法介绍 -
yin_bp:
qq641879434 写道怎么设置配置文件 可以查看执行的S ...
bboss 持久层sql xml配置文件编写和加载方法介绍
bboss mvc文件上传下载新增功能详解
1.概述
最近对bboss mvc的文件上传和下载功能做了以下改造:
a.文件上传插件增加对html5文件上传功能的支持-application/octet-stream请求的处理
b.文件上传插件增加IgnoreFieldNameMultipartFile接口
c.文件下载
org.frameworkset.http.converter.FileMessageConvertor插件支持下载Resource接口对应的资源
下面详细介绍每一部分。
2.html5文件上传功能
html5文件上传时对应的mime类型可以为application/octet-stream,之前的文件上传插件是不支持application/octet-stream类型的附件的处理的,因此对上传插件进行修改从而支持这种类型的附件的处理,目前支持单次一个附件的处理,服务端的处理方式没有改变,请参考另外两篇附件处理的文章。为了测试该功能,在火狐浏览器下使用xheditor-1.1.13在线编辑器的文件上传实例demo08.html功来演示该功能,xheditor-1.1.13已经集成到bbossgroups的最佳实践工程demoproject中,对应的jsp文件为:
/demoproject/WebRoot/xheditor/demos/demo08.jsp
下载该demoproject导入eclipse并部署到tomcat在火狐浏览器中输入(xheditor自动将上传类型定义为application/octet-stream,ie还是以传统的form multidata方式提交)
http://localhost:8080/WebRoot/xheditor/demos/demo08.jsp即可点击里面的图片上传功能查看效果,这里我们只看看一下demo08.jsp中和文件上传相关的代码:
服务端处理方法为(\bestpractice\demoproject\src\org\frameworkset\mvc\FileController.java):
upload方法可以接收html5上传的附件也可以接收html4 传统表单方式上传的附件,因此屏蔽了html版本的差异性。upload方法两个参数:
IgnoreFieldNameMultipartFile filedata 包含上传的附件正文和附加信息,IgnoreFieldNameMultipartFile 类型为新加的接口类型,和MultipartFile类型的区别下节详细介绍。
String testparam 上传时指定的一个额外参数用来展示html4和html5中,随同附件一起提交的普通参数都能被bboss 的文件上传插件正常处理。
3.IgnoreFieldNameMultipartFile接口
IgnoreFieldNameMultipartFile 类型为新加的接口类型,它和之前的MultipartFile接口类型的区别在这里做详细介绍。
IgnoreFieldNameMultipartFile接口是MultipartFile接口的子类,IgnoreFieldNameMultipartFile没有新加任何方法,之所以添加IgnoreFieldNameMultipartFile接口的原因为:MultipartFile接口类型对应的控制器方法参数名称或者bean属性名称必须和对应的表单input[file]元素的name保持一致(或者必须通过@RequestParam注解来指定控制器方法参数或者bean属性和input[file]元素的name的映射关系),这对应一般的表单问题不大,因为可以明确地知道表单中file input元素的名称。但是对于第三方文件上传控件(例如swfupload,或者xheditor之类的插件)我们无法明确知道file input的name属性的值,因此无法通过input的名称和控制器方法参数或者bean属性进行值注入绑定。对于这种情况有两种处理办法,一种是采用比较原始的MultipartHttpServletRequest 对象来获取并处理所有的附件信息:
第二种方式就是本文介绍的方式,借助于新的IgnoreFieldNameMultipartFile接口来处理:
我们将附件参数files的类型指定为IgnoreFieldNameMultipartFile或者IgnoreFieldNameMultipartFile[],明确地告诉mvc忽略控制器方法参数或者bean属性与input file元素的name值进行名称映射绑定,直接将上传的附件对象作为控制器方法参数或bean属性的值注入,不管表单提交了多少个input file元素,会将所有input file元素的对应的附件或者附件数组注入到控制器方法参数或者bean属性中,这就是引入IgnoreFieldNameMultipartFile类型的目的,只要控制器方法参数或者bean属性的类型为IgnoreFieldNameMultipartFile,那么就按这个规则来进行控制器方法参数值或者bean属性值绑定。
4.org.frameworkset.http.converter.FileMessageConvertor插件支持下载Resource接口对应的资源
FileMessageConvertor插件除了任然支持File对象和Blob对象的下载外,新增了Resource类型资源的下载,包括以下类型:
ClassPathResource -- 适用于应classpath下面的各种资源
ServletContextResource --适用于web应用根目录及子目录下的各种资源
FileSystemResource --适用于文件系统中各种文件资源
UrlResource --适用于url连接对应各种资源
ByteArrayResource--适用于二进制资源
我们以ClassPathResource 为例来说明具体的使用方法如下:
5.FileBlob的使用
FileBlob对象主要是用来直接下载Blob对象和InputStream流对象,同时可以指定一个下载文件名,实例如下:
到此,各个部分介绍完毕,如果有不妥之处,欢迎大家批评指正。
1.概述
最近对bboss mvc的文件上传和下载功能做了以下改造:
a.文件上传插件增加对html5文件上传功能的支持-application/octet-stream请求的处理
b.文件上传插件增加IgnoreFieldNameMultipartFile接口
c.文件下载
org.frameworkset.http.converter.FileMessageConvertor插件支持下载Resource接口对应的资源
下面详细介绍每一部分。
2.html5文件上传功能
html5文件上传时对应的mime类型可以为application/octet-stream,之前的文件上传插件是不支持application/octet-stream类型的附件的处理的,因此对上传插件进行修改从而支持这种类型的附件的处理,目前支持单次一个附件的处理,服务端的处理方式没有改变,请参考另外两篇附件处理的文章。为了测试该功能,在火狐浏览器下使用xheditor-1.1.13在线编辑器的文件上传实例demo08.html功来演示该功能,xheditor-1.1.13已经集成到bbossgroups的最佳实践工程demoproject中,对应的jsp文件为:
/demoproject/WebRoot/xheditor/demos/demo08.jsp
下载该demoproject导入eclipse并部署到tomcat在火狐浏览器中输入(xheditor自动将上传类型定义为application/octet-stream,ie还是以传统的form multidata方式提交)
http://localhost:8080/WebRoot/xheditor/demos/demo08.jsp即可点击里面的图片上传功能查看效果,这里我们只看看一下demo08.jsp中和文件上传相关的代码:
<link rel="stylesheet" href="common.css" type="text/css" media="screen" /> <script type="text/javascript" src="../jquery/jquery-1.4.4.min.js"></script> <script type="text/javascript" src="../xheditor-1.1.13-zh-cn.min.js"></script> <script type="text/javascript"> $(pageInit); function pageInit() { $.extend(xheditor.settings,{shortcuts:{'ctrl+enter':submitForm}}); $('#elm1').xheditor({upLinkUrl:"<%=request.getContextPath()%>/file/upload.page",upLinkExt:"zip,rar,txt",upImgUrl:"<%=request.getContextPath()%>/file/uploadwithbean.page?testparam=中文",upImgExt:"jpg,jpeg,gif,png",upFlashUrl:"<%=request.getContextPath()%>/file/upload.page",upFlashExt:"swf",upMediaUrl:"<%=request.getContextPath()%>/file/upload.page",upMediaExt:"wmv,avi,wma,mp3,mid"}); $('#elm2').xheditor({upLinkUrl:"<%=request.getContextPath()%>/file/upload.page?immediate=1",upLinkExt:"zip,rar,txt",upImgUrl:"<%=request.getContextPath()%>/file/upload.page?testparam=test&immediate=1",upImgExt:"jpg,jpeg,gif,png",upFlashUrl:"<%=request.getContextPath()%>/file/upload.page?immediate=1",upFlashExt:"swf",upMediaUrl:"<%=request.getContextPath()%>/file/upload.page?immediate=1",upMediaExt:"wmv,avi,wma,mp3,mid"}); $('#elm3').xheditor({upLinkUrl:"<%=request.getContextPath()%>/file/upload.page",upLinkExt:"zip,rar,txt"}); $('#elm4').xheditor({upImgUrl:"<%=request.getContextPath()%>/file/upload.page",upImgExt:"jpg,jpeg,gif,png"}); $('#elm5').xheditor({upFlashUrl:"<%=request.getContextPath()%>/file/upload.page",upFlashExt:"swf",upMediaUrl:"<%=request.getContextPath()%>/file/upload.page",upMediaExt:"wmv,avi,wma,mp3,mid"}); $('#elm6').xheditor({upLinkUrl:"<%=request.getContextPath()%>/file/upload.page",upLinkExt:"zip,rar,txt",upImgUrl:"<%=request.getContextPath()%>/file/upload.page",upImgExt:"jpg,jpeg,gif,png",onUpload:insertUpload}); }
服务端处理方法为(\bestpractice\demoproject\src\org\frameworkset\mvc\FileController.java):
public @ResponseBody String upload(IgnoreFieldNameMultipartFile filedata,String testparam) throws IllegalStateException, IOException { if(filedata != null) { //将附件存入d盘下的文件tst.png filedata.transferTo(new File("d:/tst.png")); } return "{\"err\":\"\",\"msg\":\"tst.png\"}"; }
upload方法可以接收html5上传的附件也可以接收html4 传统表单方式上传的附件,因此屏蔽了html版本的差异性。upload方法两个参数:
IgnoreFieldNameMultipartFile filedata 包含上传的附件正文和附加信息,IgnoreFieldNameMultipartFile 类型为新加的接口类型,和MultipartFile类型的区别下节详细介绍。
String testparam 上传时指定的一个额外参数用来展示html4和html5中,随同附件一起提交的普通参数都能被bboss 的文件上传插件正常处理。
3.IgnoreFieldNameMultipartFile接口
IgnoreFieldNameMultipartFile 类型为新加的接口类型,它和之前的MultipartFile接口类型的区别在这里做详细介绍。
IgnoreFieldNameMultipartFile接口是MultipartFile接口的子类,IgnoreFieldNameMultipartFile没有新加任何方法,之所以添加IgnoreFieldNameMultipartFile接口的原因为:MultipartFile接口类型对应的控制器方法参数名称或者bean属性名称必须和对应的表单input[file]元素的name保持一致(或者必须通过@RequestParam注解来指定控制器方法参数或者bean属性和input[file]元素的name的映射关系),这对应一般的表单问题不大,因为可以明确地知道表单中file input元素的名称。但是对于第三方文件上传控件(例如swfupload,或者xheditor之类的插件)我们无法明确知道file input的name属性的值,因此无法通过input的名称和控制器方法参数或者bean属性进行值注入绑定。对于这种情况有两种处理办法,一种是采用比较原始的MultipartHttpServletRequest 对象来获取并处理所有的附件信息:
public void uploadFile(MultipartHttpServletRequest request, ModelMap model, @RequestParam(name = "upload_") String upload_) { Iterator<String> fileNames = request.getFileNames(); List<UpFile> files = new ArrayList<UpFile>(); File dir = new File("d:/mutifiles/"); if(!dir.exists()) dir.mkdirs(); while (fileNames.hasNext()) { String name = fileNames.next(); MultipartFile file = request.getFile(name); String temp = file.getOriginalFilename(); try { file.transferTo(new File("d:/mutifiles/" + temp)); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } UpFile uf = new UpFile(); uf.setFileName(temp); uf.setFileType(file.getContentType()); files.add(uf); } model.addAttribute("files", files); }
第二种方式就是本文介绍的方式,借助于新的IgnoreFieldNameMultipartFile接口来处理:
public @ResponseBody String upload(IgnoreFieldNameMultipartFile[] files,String testparam) throws IllegalStateException, IOException { if(filedata != null) { filedata[0].transferTo(new File("d:/tst.png")); } return "{\"err\":\"\",\"msg\":\"tst.png\"}"; }
我们将附件参数files的类型指定为IgnoreFieldNameMultipartFile或者IgnoreFieldNameMultipartFile[],明确地告诉mvc忽略控制器方法参数或者bean属性与input file元素的name值进行名称映射绑定,直接将上传的附件对象作为控制器方法参数或bean属性的值注入,不管表单提交了多少个input file元素,会将所有input file元素的对应的附件或者附件数组注入到控制器方法参数或者bean属性中,这就是引入IgnoreFieldNameMultipartFile类型的目的,只要控制器方法参数或者bean属性的类型为IgnoreFieldNameMultipartFile,那么就按这个规则来进行控制器方法参数值或者bean属性值绑定。
4.org.frameworkset.http.converter.FileMessageConvertor插件支持下载Resource接口对应的资源
FileMessageConvertor插件除了任然支持File对象和Blob对象的下载外,新增了Resource类型资源的下载,包括以下类型:
ClassPathResource -- 适用于应classpath下面的各种资源
ServletContextResource --适用于web应用根目录及子目录下的各种资源
FileSystemResource --适用于文件系统中各种文件资源
UrlResource --适用于url连接对应各种资源
ByteArrayResource--适用于二进制资源
我们以ClassPathResource 为例来说明具体的使用方法如下:
public @ResponseBody Resource exportExeclTemplate() throws Exception { String fileName = "com/sany/mms/background/action/exceldata.xls"; ClassPathResource classpath = new ClassPathResource(fileName); return classpath; }
5.FileBlob的使用
FileBlob对象主要是用来直接下载Blob对象和InputStream流对象,同时可以指定一个下载文件名,实例如下:
public @ResponseBody FileBlob exportExeclTemplate() throws Exception { String fileName = "com/sany/mms/background/action/exceldata.xls"; FileBlob fb = new FileBlob ("exceldata.xls",new FileInputstream(new File(fileName)))//下载文件流 FileBlob fb = new FileBlob ("exceldata.xls",Blob对象) //下载blob流 FileBlob fb = new FileBlob ("test.xml",new URL("http://localhost:8080/bboss/test.xml"));//下载url地址对应的资源 return fb; }
到此,各个部分介绍完毕,如果有不妥之处,欢迎大家批评指正。
发表评论
-
bboss mvc控制器方法跳转地址设置方法介绍
2017-12-09 21:52 907bboss mvc控制器方法跳转地址设置方法介绍 1.直接指 ... -
bboss mvc json插件设置日期类型格式方法
2017-02-28 11:33 740bboss mvc json插件设置日期类型格式方法 一般的 ... -
bboss mvc控制器实现etag和last modify两种http缓存机制
2016-09-07 23:48 1260bboss mvc控制器实现etag和last modify两 ... -
bboss wordpdf构建部署介绍
2016-09-02 15:47 568bboss wordpdf构建部署介绍 下载 源码下载地址: ... -
解决tomcat stop报Illegal access: this web application instance has been stopped异常方法
2015-12-26 23:41 5934解决tomcat stop报Illegal access: t ... -
bboss mvc文件上传实例
2015-06-08 11:13 37本文着重介绍bboss mvc文件上传功能,切入正题 功能点 ... -
bboss mvc @RequestBody注解使用说明
2014-10-23 15:53 1047@RequestBody可以将客户端请求报文体通过数据类型转换 ... -
bboss开发、模块工程目录结构及功能说明
2014-10-15 19:46 4860基于bboss开发项目说明 ... -
bboss安全认证过滤器认证后重定向到请求页面功能介绍
2014-10-12 10:55 1339本文介绍bboss安全认证 ... -
bboss mvc控制器方法响应报文注解ResponseBody使用说明
2014-09-20 22:39 1190bboss mvc控制器方法响应 ... -
bboss mvc启动事件监听器使用方法
2014-09-02 20:25 1155在实际应用,往往需要在mvc容器启动后执行相应的操作,bbos ... -
bboss session共享使用方法介绍
2014-05-10 16:12 6130bboss session共享使用方法 ... -
bboss将一个组件同时发布为webservice,hessian,http三种服务方法介绍
2014-04-12 14:31 1652bboss将一个组件同时发布为webservice,hessi ... -
bboss发布apache cxf 2.7.6服务和定义客户端服务实例可能产生冲突解决办法
2014-03-22 23:16 1085bboss发布apache cxf 2.7.6服务和定义客户端 ... -
bboss mvc接收和响应xml格式数据的方法
2013-12-28 19:14 1068本文介绍bboss mvc接收和响应xml格式数据的方法 1 ... -
bboss mvc忽略对bean属性进行参数绑定方法
2013-10-10 20:20 972bboss mvc忽略对bean属性进行参数绑定方法非常简单, ... -
bboss mvc参数绑定注解RequestParam使用说明
2013-08-17 00:02 4191bboss mvc参数绑定注解RequestParam使用说明 ... -
bboss mvc参数绑定注解MapKey使用说明
2013-08-10 23:27 1177bboss mvc参数绑定注解MapK ... -
bboss mvc获取request,session,response,pageContext对象方法
2013-07-12 13:19 1388本文介绍基于bboss mvc后台java程序如何获取requ ... -
bboss mvc ajax响应输出中文乱码解决方法
2013-07-10 23:08 1066对于bboss mvc ajax请求响应出现的中文乱码问题,怎 ...
相关推荐
BBoss MVCDemo 是一个基于Java的企业级应用框架,它主要为开发者提供了一种高效、灵活的MVC(Model-View-Controller)开发模式。这个框架的目的是简化企业级Web应用的开发流程,提高开发效率,并且具备良好的可扩展...
NULL 博文链接:https://yin-bp.iteye.com/blog/1131637
至于“公共开发平台国际化.ppt”,这是一个可能与本次主题相关的文件,可能是关于bboss MVC或类似框架在开发公共平台时如何实现国际化(i18n)的介绍。国际化是使软件产品能够适应不同地区的语言和文化习惯的过程,...
BBoss是一个轻量级的企业级应用开发框架,提供了IOC(Inversion of Control)功能,使得对象之间的依赖关系可以通过配置文件进行管理。本文将详细介绍如何在BBoss的IOC配置文件中引用外部属性文件,以便更好地管理和...
本实例是一个基于bboss es spring boot starter的demo maven工程,可供spring boot项目集成bboss elasticsearch rest client参考 展示了通过spring boot管理单集群功能和管理多集群功能 单集群测试用例:...
官方版本,亲测可用
生成的所有文件存放在服务器上,代码生成器会提供打包下载功能 项目中包含的两个eclipse工程说明 gencode-core-代码生成器核心工程 gencode-web-代码生成器web工程 gencode-web-app-代码生成器管理配置工程,发布
首先,我们来看一下`SYSAuthenticateFilter.java`这个文件。作为过滤器的实现类,它通常会包含以下核心功能: 1. **初始化配置**:在过滤器实例化时,`init()`方法会被调用。在这里,我们可以配置过滤器的参数,如...
该工具是一款基于bboss...此工具能够自动生成bboss MVC、IOC、持久化、JSP、i18n、SQL配置文件、Web服务、Hessian服务等相关源代码,适用于快速开发和项目迭代。详细文档请参考:http://yin-bp.iteye.com/blog/2256948
该项目是基于Java语言的bboss开源框架构建的设计源码,包含3075个文件,涵盖2700个Java源文件、85个XML配置文件、52个HTML文件、39个properties和prefs文件、23个GIF图片、18个Gradle文件、17个gitignore文件、10个...
在应用集成方面,bboss会话共享提供了一个插件,其扩展性强,作用在于为应用提供统一的会话管理功能。开发者需要将原来的容器session监听器迁移到bboss会话共享实现。对于修改session中的对象数据,必须调用session....
BBoss(全称为bbossgroups)是一个专为企业级J2EE应用设计的开源框架,它为Java开发者提供了一系列强大的工具和服务,以简化Web应用程序的开发过程。该框架旨在提高开发效率,降低维护成本,同时保持高度的灵活性和...
bboss-mvc.xml是bboss MVC的核心配置文件,它定义了系统的全局设置,如视图解析器(View Resolver)和消息源(Message Source)。视图解析器负责将处理结果转换为用户可以查看的页面,例如JSP。在这里,配置了...
**bboss-datatran** 是一个由 **bboss** 社区开源的高效数据处理工具,专注于数据采集、数据清洗转换以及数据入库等任务。它实现了流批一体化的数据处理能力,使得用户能够灵活地应对实时和批量的数据处理场景。在...
BBoss(Business Boss)是基于Elasticsearch的一个强大且灵活的开发框架,它简化了Elasticsearch在企业级应用中的集成和开发工作。 **一、Elasticsearch简介** Elasticsearch 以其分布式、RESTful 风格的 API 而...