Spring MVC使用使用MultipartResolver与Commons FileUpload传输文件小结

1.需要的jar包

commons-fileupload.jar

知识内容在W3Cshool,链接:https://www.w3cschool.cn/spring_mvc_documentation_linesh_translation/spring_mvc_documentation_linesh_translation-pve827s5.html

2.首先配置MultipartResolver的xml

<!-- 配置文件上传 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 默认编码 -->
        <property name="defaultEncoding" value="utf-8" />
        <!-- 文件大小最大值 -->
        <property name="maxUploadSize" value="10485760000" />
        <!-- 内存中的最大值 -->
        <property name="maxInMemorySize" value="40960" />
    </bean>

3.可以开始写java上传测试类了

package com.amayadream.webchat.utils;

import java.io.File;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.multipart.MultipartFile;

/**
 * 
* @ClassName: FileWriterTest
* @Description: MVC上传文件测试类
* @author shadow
* @date 2018年6月6日 下午2:00:00
*
 */
public class FileWriterTest {
	
	/**
	 * 
	* @Title: saveFiles
	* @Description: 保存多个文件
	* @param @param files
	* @param @return    设定文件
	* @return boolean    返回类型
	* @throws
	 */
	public boolean saveFiles(MultipartFile[] files,HttpServletRequest req) {
		//定义文件存储位置
		String path = req.getServletContext().getRealPath("/")+"upload"+"\\";
		//定义一个MultipartFile对象
		MultipartFile multipartFile;
		//判断文件数组不为空且长度大于0
		boolean flag = true;
		if(files!=null&&files.length>0) {
			//循环存储文件
			for(int i=0;i<files.length;i++) {
				//给MultipartFile对象赋予属性
				multipartFile = files[i];
				//保存文件
				flag = saveFile(multipartFile, path,req);
			}
		}
		return flag;
	}
	
	/**
	 * 
	* @Title: saveFile
	* @Description: 保存单个文件
	* @param @param file
	* @param @param path
	* @param @return    设定文件
	* @return boolean    返回类型
	* @throws
	 */
	public boolean saveFile(MultipartFile multipartFile,String path,HttpServletRequest req) {
		//防止多线程下的创建文件出错
		synchronized (this) {
			//判断文件是否为空
			if(!multipartFile.isEmpty()) {
				try {
					//创建用于转存数据的文件对象
					File saveFile = new File(path);
					/*例子1:
					 * 你想在E盘下创建A文件夹,再在A文件夹中创建B文件夹,但是你并不知道有没有A文件夹(没有A文件夹就更不会   在A文件夹下有B文件夹)
					 * 这种情况就需要进行目录判断(判断在E盘下是否存在A文件夹)
					 * File saveFile = new File(E:\\A\\B);
					 * if(!saveFile.exists()) {   exists()方法判断该目录是否存在
						saveFile.mkdirs();        mkdirs()创建多级目录
					   }
					 * 例子2:
					 * 你想在E盘下的A文件夹中创建B文件夹,在已有A文件夹的目录下创建B文件夹
					 * 同样进行目录判断(判断在A文件夹下是否存在B文件夹)
					 * File saveFile = new File(E:\\A\\B);
					 * if(!saveFile.exists()) {    exists()方法判断该目录是否存在
					 * saveFile.mkdir();           mkdir()创建1级目录
					 * }
					 * */
					//判断该文件对象(该文件夹是否存在)是否存在,不存在则创建该名称文件夹
					if(!saveFile.exists()) {
						saveFile.mkdirs();
					}
					//文件保存路径>>>>>>>>>>>>>>>>>getOriginalFilename()为获取客户端上通过HTTP传输过来文件的原始名称
					String saveFilePath = path+multipartFile.getOriginalFilename();
					//转存文件  >>>>>>>>>transferTo()将接收到的文件传输到指定的目标文件,如果目标文件已经存在,它将首先删除目标文件再传输到指定的目标文件(可以理解为覆盖同名)。
					multipartFile.transferTo(new File(saveFilePath));
				} catch (Exception e) {
					e.printStackTrace();
					return false;
				}
			}
			return true;
		}
	}
}

4.在controller中调用工具方法

package com.amayadream.webchat.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.amayadream.webchat.utils.FileWriterTest;
import com.amayadream.webchat.utils.Result;

/**
 * 
* @ClassName: AboutController
* @Description: TODO(这里用一句话描述这个类的作用)
* @author 
* @date 2018年6月6日 下午3:00:12
*  >>>>>>>>>>>>>>@RestController效果 为  @Controller + @ResponseBody的效果  给Controller加后    类里的方法都不会返回视图,返回的就是类返回的内容
 */
@RestController
@RequestMapping(value="file")
public class AboutController {
	
	@RequestMapping(value="upload",method = RequestMethod.POST)
	public Result saveFiles(@RequestParam("files") MultipartFile[] files,FileWriterTest fileWriter) {
		boolean flag = fileWriter.saveFiles(files);
		if(flag){
			return new Result(Result.SUCCESS, "成功");
		}else {
			return new Result(Result.ERROR, "失败");
		}
	}
	
}

5.前端代码

<form action="${ctx}/file/upload" method="post" enctype="multipart/form-data">
									<input type="file" id="" name="files"multiple>
									<input type="file" id="" name="files"multiple>
									<input type="file" id="" name="files"multiple>
									<input type="submit" value="提交">
									</form>

6结果


E盘中并不存在目录文件夹



点击提交后



小结:文件上传并不是很难,但是对于文件夹创建需要谨慎小心。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC配置Multi-part解析器需要以下几个步骤: 1. 添加Maven依赖 ```xml <!-- Spring MVC Multi-part Dependency --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.9</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> ``` 2. 配置Multi-part解析器 在Spring配置文件中添加如下配置: ```xml <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="1000000" /> </bean> ``` 在这个示例中,我们使用CommonsMultipartResolver作为Multi-part解析器,并设置了最大上传文件大小为1MB。 3. 在控制器中使用Multi-part解析器 你可以在控制器中通过@RequestParam注解获取上传的文件,例如: ```java @RequestMapping(value = "/uploadFile", method = RequestMethod.POST) public String uploadFile(@RequestParam("file") MultipartFile file) { // 处理上传的文件 return "redirect:/"; } ``` 在这个示例代码中,我们使用@RequestParam注解将上传的文件绑定到MultipartFile对象上。你可以在控制器中使用MultipartFile对象处理上传的文件。 注意,如果你使用的是Spring Boot,Multi-part解析器已经默认配置好了,你只需要在控制器中使用即可。例如: ```java @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file) { // 处理上传的文件 return "redirect:/"; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值