使用MultipartFile 做文件上传的功能

使用 MultipartFile

准备表单

<body>
    <form enctype="multipart/form-data" method="post" action="/upload">
        文件:<input type="file" name="head_img"/>
        姓名:<input type="text" name="name"/>
        <input type="submit" value="上传"/>
    </form>
</body>

 

控制器

import net.xdclass.demo.domain.JsonData;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;

@RestController
public class FileController {

    private static final String filePath = "D:\\IdeaProjects\\xdclass_springboot\\src\\main\\resources\\static\\images\\";

    @PostMapping(value = "/upload")
    public JsonData upload(
            @RequestParam(value = "head_img") MultipartFile file,
            HttpServletRequest request) {

        // 表单的 name="name" 属性
        String name = request.getParameter("name");
        // 上传的文件名
        String filename = file.getOriginalFilename();
        String suffixName = filename.substring(filename.lastIndexOf("."));

        // 随机生成
        filename = UUID.randomUUID() + suffixName;
        File dest = new File(filePath + filename);

        try {
            file.transferTo(dest);
            return new JsonData(0, dest);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new JsonData(-1, null, "faild to save");

    }

}

 

  MultipartFile 对象的transferTo方法,用于文件保存(效率和操作比原先用FileOutStream方便和高效)。

 

  访问 http://localhost:8080/upload.html,结果如下。

{
"code": 0,
"data": "D:\\IdeaProjects\\xdclass_springboot\\src\\main\\resources\\static\\images\\611fbdd7-95c5-4803-8c6f-796cccf6d2be.jpg",
"msg": null
}

  

  查看上传的图片。

http://localhost:8080/images/611fbdd7-95c5-4803-8c6f-796cccf6d2be.jpg

 

 

考虑1:限制文件大小

思路:自定义 createMultipartConfig。放在启动类里也可以。

 

@Bean
public MultipartConfigElement multipartConfigElement() {
    MultipartConfigFactory factory = new MultipartConfigFactory();
    //单个文件最大
    factory.setMaxFileSize(DataSize.ofMegabytes(300));
    /// 设置总上传数据总大小
    factory.setMaxRequestSize(DataSize.ofGigabytes(1));
    return factory.createMultipartConfig();
}

 

考虑2:自定义上传文件的保存路径

避免硬编码,思路:写成 配置文件,读取出来。

参考我的 “读取配置文件”,https://www.cnblogs.com/wuyicode/p/11249913.html 。

 

posted on 2019-07-26 16:48  wuyicode  阅读(15500)  评论(0编辑  收藏  举报