先後端交互除了數據類型以外,還會出現文件流的傳輸
好比壓縮包,圖片等待
在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
謝謝關注~記得點個贊再走哦