Jfinal 上传文件

前提准备:导包 cos-26Dec2008.jar


1.配置默认上传路径

public void configConstant(Constants me) {
		*
		*
		String path = JFinal.me().getServletContext().getRealPath("/");
		me.setUploadedFileSaveDirectory(path+"\\upload\\");
		//事实证明,不配置它也会默认创建一个名为upload文件夹将上传的文件放进去。
		//因此,上传路径的文件夹是不需要自己先创建好的。
		*
		*
	}
	
	
	
2.jsp页面(enctype="multipart/form-data" 是必须的)action 看自己的哪个,我这里是user路由下的upload方法中接收文件
<form action="user/upload" method="post" enctype="multipart/form-data">
    <div class="form-group">
      <label class="sr-only" for="inputfile">上传文件</label>
      <input type="file" id="inputfile" name="file">//其实就这句有用
   </div>
    </form>
    
    
 3.Control
 public void upload(){
		/*
		 * 自定义保存路径
		 *String realPath = JFinal.me().getServletContext().getRealPath("/");
		 *String savePath = realPath+"\\upload1\\";
		 *UploadFile fine1 = getFile("file",savePath);
		 **/
		// 不填写保存路径
		UploadFile fine = getFile("file");//file是jsp页面input type='file'的name
		render("/edit.jsp");
	}
4.最近做项目用这个出现的一些问题,也许是我对文件上传的理解不够深。
    1)如果upload方法上加了验证器Validator。真实的效果是文件上传之后才调用Validator。
    2)如果不是上传表单,form中就千万别加 enctype="multipart/form-data"
    3 务必将 getFile()方法凡在method的第一行位置。
    4)关于文件上传改名写了个方法 有点乱乱的 但是管用。。
    
    //上传新文件并删除旧文件,如果不上传应该就没有删除旧文件的必要吧。
    public static File renameFile(UploadFile uploadFile, String oldFilePath) {
		if (uploadFile != null) {
			File f = uploadFile.getFile();
			String houzhui = f.getName()
					.substring(f.getName().lastIndexOf("."));
			Long l = System.currentTimeMillis();
			String path = uploadFile.getSaveDirectory();
			if (oldFilePath != null && !"".equals(oldFilePath)) {
				oldFilePath = oldFilePath
						.substring(oldFilePath.indexOf("/") + 1);
				File old = new File(path + oldFilePath);
				boolean b = old.exists() ? old.delete() : false;
				System.out.println(b);
			}
			File fn = new File(path + "pic" + l + houzhui);//名字这里设置规则就好了
			f.renameTo(fn);
			return fn;
		}
有待补充、


你可能感兴趣的:(Jfinal 上传文件)