⑴除此之外, 这个拦截器还提供了额外的信息: ContentType和FileName供我们使用:
⑵[File Name]ContentType: 文件的ContentType(可以用在做download的时候)
⑶[File Name]FileName: 实际的文件名
⑷在上面的action例子里, 那么有uploadFilesContentType和uploadFilesFileName这个属性, 也能够被自动绑定.
⑸具体的代码可以参考webwork的upload example
⑹结论:灵活运用拦截器可以让原本复杂,繁琐的工作变得轻松,简单.
⑺webwork的文件上传实际上是封装了几种通用的File Upload lib,并不是自己实现的,这它包括了pell,cos,apache mon三种实现。
⑻cos是oreilly的包,cos包的功能是最全面的,也是我最喜欢用的文件上传lib
⑼apache mon 是apache的mon中的一个
⑽pell的来源我没有考证过。
⑾webwork对这三个包的封装有些类似apache mon logging,提供了一个通用的访问接口,至于具体用什么,则在webwork.properties中配置。
⑿如果你直接使用Webwork的FileUpload拦截器,推荐你使用pell,因为当你上传中文文件名称的文件的时候,只有pell包会正确的获得中文文件名称,apache mon会将文件名称改为xxxxxxx.tmp这样的文件名,而cos会乱码,因此我们唯一的选择只有pell。
⒀webwork的封装丧失了很多cos的功能。cos需要设置request的character encoding,但是webwork的封装没有设置,所以就导致了cos的乱码问题,当然如果你单独使用cos,则会避免此类问题。
⒁在webwork的file upload 拦截器功能中,它提供的File只是一个临时文件,Action执行之后就会被自动删除,因此你必须在Action中自己出来文件的存储问题,或者写到服务器的某个目录,或者保存到数据库中。如果你准备写到服务器的某个目录下面的话,你必须自己面临着处理文件同名的问题,但是实际上cos包已经提供了文件重名的自动重命名规则。
⒂不复杂的应用直接使用webwork的拦截器,复杂的应用自己写拦截器调用cos来完成。