Skip to end of metadata
Go to start of metadata

bdf2-uploader不再维护的通告

2014年07月01日起,BDF2中提供的bdf2-uploader模块将下线,项目当中如果需要使用文件上传组件,请采用dorado7中提供的dorado-uploader,相比之下dorado-uploader更易使用,dorado-uploader项目地址为http://bsdn.org/projects/dorado-uploader-addon 。

      在BDF2-UPLOADER模块当中,为我们提供了一个将文件从浏览器上传到服务端的工具,该工具以标准的Dorado7组件形式存在,利用标准的HTML及JAVASCRIPT实现文件的选择与上传(未采用任何其它第三方控件,比如flash,activex等),兼容所有主流浏览器(IE、FF、Chrome等),默认提供了将文件保存到服务端某文件夹或服务端数据表中两种类型的文件存储机制。

      要使用BDF2-UPLOADER模块,我们可以到nexus.bsdn.org上下载最新的BDF2-UPLOADER模块的jar,或者可以到我们提供的在线创建项目向导中选择BDF2-UPLOADER模块并下载即可;同样,如果您采用的是Maven来管理项目,那么只需要将BDF2-UPLOADER模块的依赖信息加到我们的pom.xml当中即可:

BDF2-UPLOADER模块的依赖

      添加好BDF2-UPLOADER模块之后,就可以启动我们的项目。

注意

实际上,BDF2-JASPERREPORTS模块就依赖BDF2-UPLOADER模块,所以在之前我们介绍BDF2-JASPERREPORTS模块中,在上传jasper格式报表及相关资源,用的就是BDF2-UPLOADER模块提供的上传功能。

      我们知道BDF2-JASPERREPORTS模块提供了一个标准的Dorado7组件来让我们实现上传功能,所以启动工程后,要在我们view的工具栏当中看到这个上传组件,需要更新Dorado7规则(在线更新方式),更新完成之后,打开一个view,可以在工具栏当中看到如下图所示组件图标。

      这个名为“RichUploader”的组件就是BDF2-UPLOADER模块提供的上传组件,将这个组件添加到view当前,运行这个view可以看到这个组件就是一个标准的HTML的Button,如下图所示:

      因为RichUploader上传组件就是一个标准的HTML的Button,所以在Dorado7 View当中使用空上组件时,我们就可以当其是一个Dorado7的button,可以像操作Dorado7的button一样,将其放在一个容器当中,放在一个表单当中,或者放在一个FormElement的container当中,对于RichUploader我们需要注意下面这几个属性:

属性名类型默认值描述
allowFileTypesString允许用户上传哪些类型的文件,默认为空,表示不限制类型。
allowMaxFileSizeint允许用户上传文件的最大尺寸,单位是byte,默认为空,表示不限制尺寸。
captionString上传按钮的标题,如上图当中的“上传测试”。
processorString文件上传到服务端时采用哪个文件上传处理器来处理上传的文件,默认为空,表示采用ID为“Database”的文件上传处理器,这个处理器的作用就是将文件上传到服务器下某个目录。
autoSubmitbooleantrue选择好文件后是否自动上传,默认为true,表示选择好文件组件会自动触发上传动作,如果设置为false,那么我们需要手工调用该组件的submit方法来执行上传动作。

      除了上述四个属性外,RichUploader还提供了四个事件,如下表所示:

事件名描述
onSelect在选择好一个文件,但还没开始将文件上传到服务端时触发的事件,在这个事件当中,我们可以通过其中提供的arg参数的filename属性拿到选择好的文件的文件名称。
onSuccess文件上传成功之后触发的事件,从这个事件当中的arg参数中,我们可以获取到上传成功之后文件的文件名(arg.filename),以及文件存储后产生的id(arg.id),一般来说,对于我们的业务系统,我们需要保存这个id ,通过这个id就可以找到上传的文件,filename一般仅用于显示。
onFail文件上传失败之后触发的事件,从这个事件当中的arg参数中,我们可以获取到上传失败的错误消息(arg.errorMessage),比如上传文件类型不对,文件尺寸太大,或其它的错误消息等。

      我们知道RichUploader组件有个名为processor的属性,它可以决定文件上传到服务端时采用哪个文件上传处理器来处理上传的文件,默认情况下,BDF2-UPLOADER模块当中提供了两个文件上传处理器,分别是LocalDirectory及Database。LocalDirectory就是将上传的文件存储到服务端某个目录下;而Database则是将上传文件存储到服务端数据库的特定表当中。如果在使用过程当中,我们有自己的文件存储方式(比如存储到DMS中),那么可以自定义自己的文件上传处理器,要自定义文件上传处理器,我们需要实现IFileProcessor接口,这个接口源码如下:

IFileProcessor接口源码

      接口比较简单,这里就不于解释了,处理器实现类编写完成之后,需要配置到Spring当中,这样我们就可以在RichUploader中使用这个处理器了,方法就是给RichUploader的processor属性值设置为我们自定义的处理器key()方法返回的值即可。

      例子是最好的示范,我们来看看系统默认提供的Database这个自定义处理器的写法:

Database文件上传处理器

      对于已经上传好的文件,我们可以通过下页两个URL对通过RichUploader上传的文件进行在线显示(比如图片、XML文件等)或直接下载。我们首先来看看下载文件的URL:

<contextPath>/dorado/bdf2/uploader/process.download?id=<通过RichUploader上传文件成功后拿到的文件的id>

      如果需要在线显示一个通过RichUploader上传的文件,其访问的URL格式如下:

<contextPath>/dorado/bdf2/uploader/process.display?id=<通过RichUploader上传文件成功后拿到的文件的id>

      对于BDF2-UPLOADER模块,我们还提供了下面这个属性允许用户覆盖:

属性名类型默认值描述
bdf2.upload.dataSourceNameStringBDF2-UPLOADER模块要采用的数据源,为空表示采用默认数据源。
bdf2.uploader.allowMaxFileSizeint0允许上传文件的最大尺寸,默认为0表示不限制尺寸。该属性可以在RichUploader组件使用时重新定义,一旦定义会覆盖这个属性定义的值,否则就采用这里定义的值。
bdf2.uploader.allowFileTypesString允许上传文件的类型,多个类型用逗号分隔,默认为空表示不限制类型。该属性可以在RichUploader组件使用时重新定义,一旦定义会覆盖这个属性定义的值,否则就采用这里定义的值。
bdf2.uploader.defaultProcessorStringDatabase默认要采用的文件上传处理器,默认为Database,表示上传的文件存放于数据库特定表中。该属性可以在RichUploader组件使用时重新定义,一旦定义会覆盖这个属性定义的值,否则就采用这里定义的值。
bdf2.uploader.localDirectoryFileProcessorDirectoryStringuploadfiles如果采用LocalDirectory这个文件上传处理器,那么该属性就是定义文件上传到服务端后该存放于哪个目录下,默认为uploadfiles,表示将存放到应用所在目录的WEB-INF/uploadfiles目录下,如果我们需要指定其它目录,那么需要定义一个真实存在的目录,比如定义值为D:\myuploadfiles,那么就表示上传的文件放存放于D盘下的myuploadfiles目录中。
bdf2.uploader.localDirectoryFileProcessorStorageMethodStringmonth文件存储在目录中时,子目录的定义方式,这里支持三个值:year、month、day,分别表示按年、按年\月及按年\月\日这三种格式来划分目录存放上传文件。默认为month,表示按年\月格式划分目录存放上传文件。
bdf2.uploader.localDirectoryFileProcessorFileNameStorageMethodStringuuid上传后文件命名方式,这里支持三种格式:hybrid、uuid及realName。hybrid表示文件在命名是将uuid+文件名这种混合方式命名;uuid则将直接采用uuid命名文件; 而realName只是采用文件真实名称。
bdf2.uploader.disableDatabaseFileProcessorbooleanfalse是否禁用Database方式文件处理器,一旦禁用,运行时将不能使用。
bdf2.uploader.disableLocalDirectoryFileProcessorbooleanfalse是否禁用LocalDirectory方式文件处理器,一旦禁用,运行时将不能使用。

      在BDF2-UPLOADER当中为了方便我们操作文件,还提供了两个service,分别是IFileService及ILobStoreService。IFileService用于实现对上传文件的各种,比如根据上文件的文件ID查找对应的上传文件对象、根据上传文件ID查询上传的文件流等,其源码如下:

IFileService源码

      对于这个service的实例获取,我们可以通过ContextHolder.getBean(IFileService.BEAN_ID)来实现,或者直接在Spring当中注入ID为bdf2.uploader.fileService的bean。

      ILobStoreService则为我们提供了一个将文件存储到BDF2-UPLOADER中特定的数据库表的service,其源码如下:

ILobStoreService接口源码

      同样对于这个service的实例获取,我们可以通过ContextHolder.getBean(ILobStoreService.BEAN_ID)来实现,或者直接在Spring当中注入ID为bdf2.lobStoreService的bean。

 

 

Labels
  • No labels