getFile
1.Jfinal自定义上传目录
jfinal可以在config.java中设置默认的上传目录,
public void configConstant(Constants me)
{
PropKit.use("a_little_config.txt");
me.setDevMode(PropKit.getBoolean("devMode", Boolean.valueOf(false)).booleanValue());
me.setMaxPostSize(1073741824);
// me.setBaseUploadPath("/upload/");// 配置文件上传路径
}
如果加了“/”就表示在项目发布路径下面的upload下面作为上传下载目录,
如果没有加“/”则上传下载目录会在存储项目的根目录下,如果项目在D盘,则上传的文件会出现在D盘下面的“upload”文件夹下面,如果项目在Linux下面,效果更明显
上面讲的是默认的上传目录,实际开发环境中写死的路径十分不便利,为了实现自定义路径,总结了两种方法:
(1)在使用getfile()获取上传文件的时候,可以直接选择带参数的getfile()方法,有多种,这就不细讲了,直接查getfile的API,通过传递路径参数,设定路径就可以直接搞定了
UploadFile apkFile = getFile("apkFile");
(2)第一种方法通过传参数的解决的上传路径问题,但是我发现,如果做的是表单提交,需要使用表单中的部分参数来设定路径的,第一种方法就不可行,因为必须要先getfile()方法之后,才能够通过getpara()方法来获取参数值,不然在getfile()之前取到的参数值都是null。
所以就只有老老实实地先通过getfile()来获取上传文件,然后再把上传到默认路径的文件通过renameto()的方式,重命名重新传递到自定义的路径,这个时候也能够轻轻松松获取到你想要自定义的参数了,然后问题就解决了。
但是值得提醒的是,通过getpara() 获取的参数是对应表单中“name”的值,不要填错了
自定义的文件夹路径如果没有就要加一个判断,如果不存在就要新建,新建需要用mkdir(),不要其他的。
2.覆盖上传文件实现
文件上传测试过程中发现新上传的文件因为默认路径下面有原来的文件,导致最新的数据被重命名了,所以这里就需要通过覆盖原文件的方式来解决,这个问题,解决方法也是通过renameto()的方式
//如果已经存在,覆盖原文件
if (!(file.getFileName()).equals(file.getOriginalFileName())) {File oldFile = new File(path + user.getStr("id") + "/" + file.getOriginalFileName());
if (oldFile.exists()) {
File newFile = new File(path + user.getStr("id") + "/" + file.getFileName());
oldFile.delete();
newFile.renameTo(oldFile);
}
}