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
謝謝關注~記得點個贊再走哦

相關文章
相關標籤/搜索