文件上传的疑问

目前程序主要开放API供不同客户端调用,中转流程如下:

interceptor(约定交互参数校验)-->validator(参数合法性校验)-->controller(参数预处理)-->service(业务处理)-->dao(数据库操作)

因使用的文件上传功能,需要前置getFile()或getFiles(),否则导致参数无法正常获取。

受限于上述中专流程限制,需要把getFile()或getFiles()放在最上层的拦截器中。

这样一来,所有的API入口都需要走一遍getFile()或getFiles(),总感觉这样很奇怪而且不能针对不同应用场景做个性化设定,后来把需要用到上传功能的入口抽取到一个独立的拦截器,但是这样又不太灵活。

请教波总,应对这种需求有没有什么更好的方案可以兼容。

其它关于上传的一些问题(仅指个人使用感受):

  1. 文件命名策略

    如遇到重名的情况,文件名默认补位累计序号,比如首次上传"name"、后续分别为“name1”、“name2”,

    对于一些需要严格要求命名的场景有些不太友好,是否可以设置不同模式(覆盖、顺序累加、自定义等)

  2. 非法文件拦截

    如把getFile()或getFiles()放置在顶层拦截器,文件优先执行上传,后续层层校验中途出现问题需要对文件执行删除,导致代码冗余太多,而且稍有处理不慎会导致无用文件越积越多。




评论区

hamy

2019-05-31 09:38

嗯,其实上传这我也有疑惑,有没有更好的方式

JFinal

2019-05-31 09:49

如果有拦截器的话,先在拦截器第一行调用一次: getFiles()

后面在controller 中就可以正常获取参数了,然后可以通过 getFile(...).getFile().renameTo(new File(新名字)) 将上传文件改名,甚至转移目录

azzcsimp

2019-05-31 10:31

@JFinal 目前就是采用的这种方式,上层入口先getFiles(),后续再进行文件校验、重命名、转存或删除,看来也只能这样了