jfinal 上传文件的相对路径问题

JerryYux 发布于 2015/01/28 15:39
阅读 5K+
收藏 1

@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");
	}
	
}
结果:

加载中
1
JFinal
JFinal

    试了一下,将如下这行

me.setUploadedFileSaveDirectory("file home");

改成下面这样就可以了:

me.setUploadedFileSaveDirectory("/file home");

   原因是文件上传组件初始化时未将设置的路径初始化为绝对路径,而 getFile 方法在未指定 saveDir 时,会使用 setUploadFileSaveDirectory 中设置的路径,该路径在MultipartRequest.handleSaveDirectory() 方法中做处理时被判断是相对路径,所以又将以 setUploadFileSaveDirectory 设置的路径为前缀,造成了重复。感谢反馈,jfinal 2.0 会改进 

0
chris_hellowoo
chris_hellowoo
我是这样做的:配置常量:me.setUploadedFileSaveDirectory("D:\\BisheProject\\estqq\\WebRoot\\esp_upload");把上传文件夹的绝对路径指定,然后在相应的action中,UploadFile uf = getFile("user_voice","test/");这样处理的结果:会在esp_upload文件夹下创建一个test文件夹,并且我上传的文件会在这个文件夹下。希望对你有点帮助。
JerryYux
JerryYux
对源代码中的return MultipartRequest.saveDirectory + saveDirectory;这句话不是很理解,
0
JFinal
JFinal

引用来自“chris_hellowoo”的评论

我是这样做的:配置常量:me.setUploadedFileSaveDirectory("D:\\BisheProject\\estqq\\WebRoot\\esp_upload");把上传文件夹的绝对路径指定,然后在相应的action中,UploadFile uf = getFile("user_voice","test/");这样处理的结果:会在esp_upload文件夹下创建一个test文件夹,并且我上传的文件会在这个文件夹下。希望对你有点帮助。
你在 me.setUPloadedFileSaveDirectory 时使用的是绝对路径,所以不会出现问题,文件上传设置中的绝对路径是指以 "/" 打头,或者以盘符打头如: "D:/path",前者用于 linux 后者用于 windows
chris_hellowoo
chris_hellowoo
返回顶部
顶部