因为项目中经常遇到文件上传,特别是图片上传,所以特地写了一个工具类,用于对文件上传的封装,并返回相对路径!
相对路径已相对于html文件位置,可以直接存储进数据库!
在com.nunbey.lotus.utils下
类名 | Upload |
接口 | IUpload |
提供的方法:
构造方法:
public Upload(MultipartFile file, HttpServletRequest request)
public Upload(MultipartFile[] files, HttpServletRequest request)
第一个构造函数,对于单文件上传时所需,第二是多文件时
业务方法:
业务方法:
保存校组织: 其中type:
0.学院 1.社团 2.工作室照片
public String saveOrganizationImage(int type,String id,String name)
public List<String> saveOrganizationImages(int type, String id, String name)
保存活动:
type:
0.轮播图活动 1.基本活动 2.考试活动
public String saveActivityImage(int type,String id,String name,String activityId)
public List<String> saveActivityImages(int type,String id,String name,String activityId)
其余参数对照数据库,保存单文件和多文件,对应上面的构造方法
方法返回绝对路径,单文件返回String,多文件返回 List<String>
私有方法:
/** * 创建文件夹,如果不存在,那就创建,如果存在,即不创建 * @param children_dir 子文件夹名字 * @return */
private File creat_dir(String children_dir)
/** * 保存文件 * @param f 文件的路径,可以是项目的绝对路径 * @param fileName 文件名,流在file中 * @return 返回相对路径可以直接存入数据库 * @throws Exception */
private String save(File f,String fileName) throws Exception
重设方法:
public void setFile(MultipartFile file)
public void setFiles(MultipartFile[] files)
public void setRequest(HttpServletRequest request)
public String getPath()
重设的三个参数都是构造方法中的,就意味着,我们可以使用一个对象切换不同的file,files来实现不同文件的保存,
path是文件的绝对路径,可以获取
示例:
单文件:
控制器:controller
@PostMapping("/load2") public String upload2(MultipartFile file, HttpServletRequest request,String name,Integer age) throws Exception { Upload upload = new Upload(file,request); //创建对象 String path = upload.saveOrganizationImage(1,"23232323","alibaba"); 调用方法 System.out.println(path); return "login"; }
前端页面:html
<form action="load2" method="post" enctype="multipart/form-data"> <input type="file" name="file"><br/> <input type="text" name="name"><br/> <input type="text" name="age"><br/> <input type="submit" value="提交"> </form>
多文件:
控制器:controller
@PostMapping("/load3") public String upload3(@RequestParam MultipartFile[] files, HttpServletRequest request) throws Exception { Upload upload = new Upload(files,request); List<String > path = upload.saveOrganizationImages(1,"23232323","alibaba"); System.out.println(path); return "login"; }
前端页面:html
<form action="load3" method="post" enctype="multipart/form-data"> <input type="file" name="files"><br/> <input type="file" name="files"><br/> <input type="file" name="files"><br/> <input type="text" name="name"><br/> <input type="text" name="age"><br/> <input type="submit" value="提交"> </form>
后记:
- 如果只是上传一个文件,则只需要MultipartFile类型接收文件即可,而且无需显式指定@RequestParam注解
- 如果想上传多个文件,那么这里就要用MultipartFile[]类型来接收文件,并且还要指定@RequestParam注解
- 并且上传多个文件时,前台表单中的所有<input type="file"/>的name都应该是myfiles,否则参数里的myfiles无法获取到所有上传的文件
打赏
支付宝扫一扫
微信扫一扫