先后端交互除了数据类型以外,还会出现文件流的传输
好比压缩包,图片等待
在Spring中使用MultipartResolver接口来进行文件的交互
这里我以springboot为基础,用五步操做带你们简单完成文件流传输html
废话很少说,直接引入包依赖:前端
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>
在springmvc配置类中:spring
@Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter
注入CommonsMultipartResolver:后端
@Bean(name = "multipartResolver") public MultipartResolver multipartResolver() throws IOException { CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setDefaultEncoding("UTF-8"); resolver.setMaxInMemorySize(10240); //最大内存大小 (10240) resolver.setMaxUploadSize(50*1024*1024); //上传文件大小(单位为字节) 50M 50*1024*1024 return resolver; }
这里有一个注意点:
(name = "multipartResolver")不能漏,由于springIOC自己存在multipartResolver
咱们须要覆盖它,若是没写,会拿不到前端传过来的文件流参数springboot
固然使用springboot的还须要一个注意点,不然也会报错
在WarApplication启动类中,添加注解:mvc
@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
直接将spring自带的MultipartAutoConfiguration排除掉app
这里我直接把Controller类贴出来,方便阅读:post
@RestController @RequestMapping("/") public class StreamController { private static final Logger logger = LoggerFactory.getLogger(StreamController.class); @PostMapping("file") public R1 fileUpload(@RequestParam("myfile") MultipartFile myfile) throws IOException { SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); String datefile = sdf.format(new Date()); if (myfile.isEmpty()){ return R1.error(500,"文件为空"); } String fileName = myfile.getOriginalFilename(); //获取上传文件的原名 logger.info(fileName+"文件已上传"); String fileSuffix = fileName.substring(fileName.lastIndexOf(".")); //获取文件后缀名 String newfileName = datefile+fileSuffix; String filePath = "D:\\CoolBlog\\back-end\\src\\main\\resources\\images\\"; //文件存储到本地的路径 //String filePath = "//CoolBlog/back-end/src/main/resources/images/"; //文件存储到本地的路径 File getFile = new File(filePath+newfileName); //本地文件名加路径的File对象 if (getFile.getParentFile().exists()){ myfile.transferTo(getFile); //把内存文件写到磁盘里 return R1.success(200,"success"); } return R1.error(500,"目标文件夹不存在"); } }
存到本地的文件用精确到秒的时间来命名,防止重复和中文报错spa
form的enctype
和第一个input的name
须要特别注意
这里很容易出错:code
<form method="post" enctype="multipart/form-data" action="file"> 上传文件: <input type="file" name="myfile"><br/> <br/> 传输: <input type="submit" value="Press"> </form>
首先启动项目,进入html,添加须要上传的文件:
接口操做成功:
图片上传成功,而且从新命名:
以上即是SSM上的文件流传输MultipartResolver
谢谢关注~记得点个赞再走哦