2024年11月教你利用WEBWORK上传文件的妙方(2)

发布时间:

  ⑴除此之外, 这个拦截器还提供了额外的信息: 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来完成。