jfinal 2.2无法自定义上传文件的路径与名称
在页面中上传excel文档,然后导入数据,但是上传的时候就出现问题,无法把文件保存到自定义目录也无法自定义文件名。
以下为controller代码
public void importData(){ String fileName = PathKit.getWebRootPath() + "/Upload/Excel/" + "student_" + Tools.getUUID() + ".xls"; UploadFile file = getFile("fileStudent"); file.getFile().renameTo(new File(fileName)); setAttr("info", fileName); render("importStudent.jsp"); }
文件成功上传了,但是在web目录的upload目录下,而且文件名并没有修改。
我想达到的目的是把文件上传到web目录下的Upload/Excel/ 而且文件名是用UUID命名的。
求解
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
是不是跨磁盘了? renameTo 的目标磁盘要与当前的磁盘一样,否则使用 copy 的方式将文件 copy 过去
回复
我的电脑是2个磁盘的,系统盘独立一个磁盘的,其他的分区都是一个磁盘的,项目在F盘,这会有关系?
回复
好吧,终于可以了,我待上传文件放在桌面,项目在另外一个磁盘的。我把文件放回那个磁盘就可以了,谢谢!
引用来自“JFinal”的评论
jfinal 自 2.1 版本开始,基于很多考虑对上传路径的规则进行了调整,在使用 getFile(...) 时传入的路径只当作是相对路径,不被当成是绝对路径。
解决办法是先使用 me.setBaseUploadPath(baseUploadPath) 设置合适的基础路径,然后在 getFile 时不传入相对路径则会将文件上传至此,使用相对路径时也将相对于 baseUploadPath 放在其子目录下。
假如 baseUploadPath 设置为根路径,例如linux 之下: me.setBaseUploadPath("/") ,则在 getFile(..., "a/b/c/d") 时相当于可以指定任意目录为上传目录
那自定义文件名呢? 还是需要renameTo()方法吧?
回复
没错,可以用 renameTo(...),不过要注意在 linux 下, renameTo 无法跨磁盘改名
jfinal 自 2.1 版本开始,基于很多考虑对上传路径的规则进行了调整,在使用 getFile(...) 时传入的路径只当作是相对路径,不被当成是绝对路径。
解决办法是先使用 me.setBaseUploadPath(baseUploadPath) 设置合适的基础路径,然后在 getFile 时不传入相对路径则会将文件上传至此,使用相对路径时也将相对于 baseUploadPath 放在其子目录下。
假如 baseUploadPath 设置为根路径,例如linux 之下: me.setBaseUploadPath("/") ,则在 getFile(..., "a/b/c/d") 时相当于可以指定任意目录为上传目录