jfinal(4)—Controller文件上传与下载

1、文件上传

1.1 引入依赖

<dependency>
<groupId>com.jfinal</groupId>
<artifactId>cos</artifactId>
<version>2019.8</version>
</dependency>

1.2 获取文件

表单的enctype=“multipart/form-data”,调用getFile系列方法来获取上传的文件。
特别注意:如果客户端请求为multipart request(form表单使用了enctype=“multipart/form-data”),那么必须先调用getFile系列方法才能使getPara系列方法正常工作,因为multipart request需要通过getFile系列方法解析请求体中的数据,包括参数。这个顺序也不是JFinal制定的,是由 http 规范决定的。同样道理在Interceptor、Validator中也需要先调用getFile。

1.3 文件上传路径

  • 默认路径:项目根路径下的upload子路径之下,该路径称为文件上传基础路径;
  • 设置路径:可以在 JFinalConfig.configConstant(Constantsme)方法中通过me.setBaseUploadPath(baseUploadPath)设置文件上传基础路径,该路径参数接受以”/”打头或者以windows磁盘盘符打头的绝对路径,即可将基础路径指向项目根径之外,方便单机多实例部署。当该路径参数设置为相对路径时,则是以项目根为基础的相对路径。
  • 获取时指定路径:可以通过getFile(String parameterName, String
    uploadPath)方法,在获取上传文件时指定文件子目录,这个目录是基于已有的baseUploadPath的
  • 转移目录:还可以通过UploadFile.getFile()方法获取一个文件对象,再使用renameTo方法将文件转移到其他目录。要转移的目录是需要事先存在的一个真实目录,不然不会转移。
//将上传基础路径设置为服务器磁盘路径
me.setBaseUploadPath("G:\\upload\\");
//下面的images是baseUploadPath的一个子目录,通过这种方式可以达到文件分目录存放
UploadFile uploadFile = getFile("file", "images");
//获取File对象,再转移到另一个已存在的文件目录
File file = uploadFile.getFile();
file.renameTo(new File(""));

1.3 限定文件大小

  • 设置通用大小限制:可以在 JFinalConfig.configConstant(Constants me)方法中通过me.setMaxPostSize(110241024)设置上传文件最大数据量,不过建议针对不同类型的文件还要有各自的大小限制。
  • 获取时设置大小限制:在获取文件的时候可以通过getFile(String parameterName,String uploadPath,
    int maxPostSize)方法指定文件的最大数据量,且这个优先级要高于通用大小限制设置。
1 //设置通用的文件大小,单位是B
2 me.setMaxPostSize(1*1024*1024);
3 //获取文件时指定限制的最大数据量,单位是B
4 getFile("file", "images", 1*1024*1024)
	/**
	 * 上传文件演示
	 */
	public void uploadFile() {
    
    

		try {
    
    
			UploadFile uploadFile = getFile("file", "file-202005",
					1 * 1024 * 1024);
			System.out.println(uploadFile.getContentType());
			System.out.println(uploadFile.getFileName());
			System.out.println(uploadFile.getOriginalFileName());
			System.out.println(uploadFile.getUploadPath());

			File file = uploadFile.getFile();
			file.renameTo(new File("G:\\upload\\test\\"+ uploadFile.getOriginalFileName()));

			System.out.println(get("name"));
			System.out.println(get("age"));

			set("msg", "上传成功");
		} catch (Exception e) {
    
    
			e.printStackTrace();
			System.out.println("上传文件失败");
			set("msg", "上传文件失败!!!");
		}

		render("pageFileMng.html");
	}

2、文件下载

2.1 文件下载路径

  • 默认路径:项目根路径下的download子路径之下,该路径称为文件下载基础路径;
  • 配置路径:可以在 JFinalConfig.configConstant(Constants me)方法中通me.setBaseDownloadPath(baseDonwnloadPath )设置文件下载基础路径,该路径参数接受以”/”打头或者以windows磁盘盘符打头的绝对路径,即可将基础路径指向项目根径之外,方便单机多实例部署。当该路径参数设置为相对路径时,则是以项目根为基础的相对路径。
  • 任意路径:renderFile(File file) 方法直接使用 File 参数去获取下载文件,可脱离baseDownloadPath的束缚,指向任意地点的文件。
//配置下载的基础路径
me.setBaseDownloadPath("G:\\upload\\");
//下载任意路线下的文件
renderFile(new File("G:\\临时文件\\栏目管理.jpg"));
  • 下载任意路线下的文件
    在这里插入图片描述

2.2.文件重新命名

如果不想使用下载文件原有的文件名,还可以指定新的下载文件名:

renderFile("用户分配权限.jpg", "新的文件名.jpg");
renderFile(new File("G:\\临时文件\\栏目管理.jpg"), "新的文件名.jpg");

猜你喜欢

转载自blog.csdn.net/qq_45928727/article/details/108897989