SSM上的文件流传输MultipartResolver

前言

先后端交互除了数据类型以外,还会出现文件流的传输
好比压缩包,图片等待
在Spring中使用MultipartResolver接口来进行文件的交互
这里我以springboot为基础,用五步操做带你们简单完成文件流传输html

第一步:POM

废话很少说,直接引入包依赖:前端

<dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>

第二步:Config配置

在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

第三步:后端API

这里我直接把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提交

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,添加须要上传的文件:

clipboard.png

接口操做成功:

clipboard.png

图片上传成功,而且从新命名:

clipboard.png

以上即是SSM上的文件流传输MultipartResolver
谢谢关注~记得点个赞再走哦

相关文章
相关标签/搜索