Jfinal自定义上传路径无效

@Jfinal,求助

今天又出现了个怪问题:上传路径无法指定。

使用getFile上传时uploadPath无论传入绝对路径还是相对路径,都不会影响最终结果,全部传到upload下,debug发现根本没走MultipartRequest的getFinalPath,导致传入的参数根本没有拼装,是我哪里没有配置好吗?

具体代码如下:

配置类

public void configConstant(Constants me) {
        // 加载少量必要配置,随后可用PropKit.get(...)获取值
        PropKit.use("jfinal.properties");
        me.setDevMode(PropKit.getBoolean("devMode", false));
        me.setBaseUploadPath(PathKit.getWebRootPath() + File.separator + "upload" + File.separator);
    }

上传代码:

StringBuilder uploadPath = new StringBuilder();
uploadPath = uploadPath.append(DateKit.dateToStr(new Date(), "yyyyMMdd")).append(File.separator);
UploadFile photo = getFile("file", uploadPath.toString(), 20 * 1024 * 1024, "UTF-8");

用的是Jfinal3.0

评论区

JFinal

2017-03-14 12:16

自 jfinal 2.1 开始,对路径相关功能引入了 base path 的概念,也就是说上传、下载有相对应的 baseUploadPath、baseDownloadPath 设定,这个 base path 是固定的,在配置的时候可以使用以 "/" 或 "x:/" 打头的方式指向一个绝对路径

该绝对路径可以设置在项目之外的地方,一旦这个 base path 设置好了,那么文件上传、下载都将在这个 base path 路径之下玩耍

因此,在 getFile(...) 时指令的路径,也只是相对于 base path 的一个相对路径而已,如果确实希望让路径更加灵活,可以尝试下面两种方式:
1:将路径设置在更浅的目录,例如设置为 "/" ,那么在 getFile 时指令目录的空间范围会大,应该可以满足需求
2:在 getFile(..) 以后,通过 renameTo(newPath) 将文件转移到希望的地方

JFinal

2017-03-14 12:18

引入 base path 是为了更加统一的管理上传、下载文件,文件在未来要移动时不需要修改代码,因为只在 base path 之下去玩耍,那么程序中的相对路径是一直固定的,不会跑到别的路径之中去

伊森

2017-03-15 13:54

@JFinal ,这块我理解,现在采用了方案二来处理
只不过我奇怪是在getFile时传入一个相对路径,但文件并没有放到这个相对路径下面,而是只放到了upload下面。
如代码示,我uploadPath参数传入的是当前日期格式的文件夹,文件却直接放到了upload下,也没有创建当前日期文件夹,甚至我写死成"/2017/"或者"\\2017\\"也没用

JFinal

2017-03-15 13:59

@伊森 看看你的 baseUploadPath 是什么值,设置一个断点在 getFile 上,单步调试到底层 jfinal 源代码,瞬间就知道了

伊森

2017-03-15 14:57

@JFinal 之前调试发现上传地址没有重新拼接,直接使用了baseUploadPath,无视我传进去的参数,就没再深究,我再深入看看

JFinal

2017-03-15 15:38

@伊森 单步调试跟踪到更深的地方,如 MultipartRquest 之中,这里才是 path 拼接的最终地方,baseUploadPath 是在启动时候会拼接的,也可以调试一下

zellford

2018-08-15 16:45

@JFinal 求助,我的问题也是文件上传路径,使用相对路径时默认的BasePath是“E:\1学委\eclipse-mars-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\Goode\upload” 但是我的工程文件是在“E:\1学委\eclipse-mars-workspace\Goode” 有个疑问为什么相对路径不是在我的工程文件下呢 ,虽然绝对路径可以解决放在工程文件下的问题 ,但是如果日后换了服务器,我的服务器没有相对应的磁盘就需要修改绝对路径的代码, 请问如何将相对路径的“upload”前的路径修改为我工程文件所在的目录“E:\1学委\eclipse-mars-workspace\Goode”呢? 文字有点多,麻烦了

JFinal

2018-08-15 16:55

@zellford 项目配置有问题,如果是 maven 项目,则删掉所有文件,只保留 src 目录以及 pom.xml 文件,重新导入 maven 项目,让 ecipse/IDEA 帮你重新生成配置

如果不是 maven 项目,参考一下 jfinal 文档:
http://jfinal.com/doc

注意看文档中 ecilpse 使用的那些截图

热门反馈

扫码入社