@JFinal 你好,想跟你请教个问题:
下面是jfinal中处理上传文件保存路径的代码片段,
me.setUploadedFileSaveDirectory("file home");
在项目中设置保存文件的相对路径为file home后,得到的路径是如下路径:
D:\aaa\bbb\file home\file home
即有两层file home
请问,将相对路径进行两层封装是出于什么考虑呢?
-------------------补充----------------------
配置:
package studyJfinal; import model.User; import com.jfinal.config.*; import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.c3p0.C3p0Plugin; import com.jfinal.render.ViewType; import controller.HelloController; public class DemoConfig extends JFinalConfig { public void configConstant(Constants me) { me.setDevMode(true); me.setViewType(ViewType.FREE_MARKER); me.setUploadedFileSaveDirectory("file home"); } public void configRoute(Routes me) { me.add("/hello", HelloController.class);//controller key 默认成为freemarker的模板文件存放路径 } public void configPlugin(Plugins me) { } public void configInterceptor(Interceptors me) { } public void configHandler(Handlers me) { } }
controller:
package controller; import java.io.File; import java.io.IOException; import model.User; import com.jfinal.core.ActionKey; import com.jfinal.core.Controller; import com.jfinal.upload.UploadFile; import freemarker.template.Configuration; public class HelloController extends Controller { public void index() { renderText("Hello JFinal World."); } @ActionKey("upload") public void upload() { UploadFile f = this.getFile(); long size = f.getFile().length(); StringBuffer sb = new StringBuffer(); sb.append("文件长度:").append(size); sb.append("\n绝对路径:").append(f.getFile().getAbsolutePath()); sb.append("\nsavedir:").append(f.getSaveDirectory()); renderText(sb.toString()); } @ActionKey("test_upload") public void testUpload() { render("upload.html"); } }结果:
试了一下,将如下这行
改成下面这样就可以了:
原因是文件上传组件初始化时未将设置的路径初始化为绝对路径,而 getFile 方法在未指定 saveDir 时,会使用 setUploadFileSaveDirectory 中设置的路径,该路径在MultipartRequest.handleSaveDirectory() 方法中做处理时被判断是相对路径,所以又将以 setUploadFileSaveDirectory 设置的路径为前缀,造成了重复。感谢反馈,jfinal 2.0 会改进
引用来自“chris_hellowoo”的评论
我是这样做的:配置常量:me.setUploadedFileSaveDirectory("D:\\BisheProject\\estqq\\WebRoot\\esp_upload");把上传文件夹的绝对路径指定,然后在相应的action中,UploadFile uf = getFile("user_voice","test/");这样处理的结果:会在esp_upload文件夹下创建一个test文件夹,并且我上传的文件会在这个文件夹下。希望对你有点帮助。