SpringBoot文件上传
2017-01-22 17:29
399 查看
技术背景:
springboot+maven+restful服务
首先分成三部分:
1.引入maven依赖包,主要是io和upload两个依赖,上代码:
或者写在单独的类里面,注入spring容器中
3.最后的重头戏,就是文件上传,这里提供两种上传方式:单文件上传和多文件上传
最后用postman调用的成功结果如下:
下篇文章是在遇到到的bug:
Java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade
cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest
以及提供的四种思路
springboot+maven+restful服务
首先分成三部分:
1.引入maven依赖包,主要是io和upload两个依赖,上代码:
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.3.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>2.写一个配置bean,可以直接在application里面写,也可以自己新建一个bean来写:两种方法如下:
public class Application { @Bean public MultipartConfigElement multipartConfigElement(){ MultipartConfigFactory factory=new MultipartConfigFactory(); factory.setMaxFileSize("128KB"); factory.setMaxRequestSize("128KB"); return factory.createMultipartConfig(); } public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
或者写在单独的类里面,注入spring容器中
import org.springframework.boot.web.servlet.MultipartConfigFactory; import org.springframework.stereotype.Component; import javax.servlet.MultipartConfigElement; /** * <p>ClassName: UploadBean * <p>Description: TODO * <p>Author maqp * <p>Version V1.0 * <p>Date 2017/1/22 */ @Component public class UploadBean { public MultipartConfigElement multipartConfigElement(){ MultipartConfigFactory factory=new MultipartConfigFactory(); factory.setMaxFileSize("128KB"); factory.setMaxRequestSize("128KB"); return factory.createMultipartConfig(); } }
3.最后的重头戏,就是文件上传,这里提供两种上传方式:单文件上传和多文件上传
import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartRequest; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * <p>ClassName: UploadController * <p>Description: TODO * <p>Author maqp * <p>Version V1.0 * <p>Date 2017/1/17 */ @RestController @RequestMapping("/api/upload") public class UploadController { //单文件上传 @RequestMapping(value = "/singleFile" ,method = RequestMethod.POST,produces = MediaType.APPLICATION_JSON_VALUE)//@RequestParam(value = "key", required = true) String key, public String singleFileUpload(@RequestParam("orderCode") String orderCode,@RequestParam(value = "fileName", required = true) String fileName,@RequestParam(value = "file", required = true) MultipartFile file){ if(!file.isEmpty()){ try { File rootDirectory=new File("rootFile\\"+orderCode); if (!rootDirectory.exists()){ rootDirectory.mkdirs(); } File outFile=new File(rootDirectory,fileName+".pjg"); byte[] bytes=file.getBytes(); BufferedOutputStream outputStream=new BufferedOutputStream(new FileOutputStream(outFile)); outputStream.write(bytes); outputStream.close(); return "upload successful the path is "+outFile.getPath(); } catch (IOException e) { e.printStackTrace(); } } return "failed because "+fileName+"file is empty"; } //多文件上传(也包含单文件) @RequestMapping(value = "/multiFile",method = RequestMethod.POST) @ResponseBody public List<String> multiFileUpload(MultipartRequest request, @RequestParam("orderCode") String orderCode) throws IllegalStateException,IOException { List<MultipartFile> files = ((MultipartHttpServletRequest)request).getFiles("file"); //建立根类的文件夹 File rootDirectory=new File("rootFile\\"+orderCode); if (!rootDirectory.exists()){ rootDirectory.mkdirs(); } List<String> listAddress= new ArrayList<>(); for (int i =0; i< files.size(); ++i) { MultipartFile file = files.get(i); String name = file.getOriginalFilename(); if (!file.isEmpty()) { try { byte[] bytes = file.getBytes(); File outFile=new File(rootDirectory,name + i); BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(outFile)); listAddress.add(outFile.getPath()); stream.write(bytes); stream.close(); } catch (Exception e) { return null; } } else { return null; } } return listAddress; } }
最后用postman调用的成功结果如下:
下篇文章是在遇到到的bug:
Java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade
cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest
以及提供的四种思路
相关文章推荐
- (29)Spring boot 文件上传(多文件上传)【从零开始学Spring Boot】
- springBoot上传文件大小设置
- spring-boot上传文件MultiPartFile获取不到文件问题解决
- 在spring boot中使用restTemplate上传大文件Java heap space
- (29)Spring boot 文件上传(多文件上传)【从零开始学Spring Boot】
- 解决使用Spring Boot、Multipartfile上传文件路径错误问题
- Spring boot 文件上传
- 29. Spring boot 文件上传(多文件上传)【从零开始学Spring Boot】
- Spring Boot整合UEditor,解决找不到上传文件的问题
- springboot文件上传
- 29. Spring boot 文件上传(多文件上传)【从零开始学Spring Boot】
- spring boot 文件上传
- SpringBoot文件上传下载和多文件上传(图文详解)
- 基于spring-boot的web应用,ckeditor上传文件图片文件
- Spring boot 文件上传(多文件上传)
- 用Spring Boot & Angular2快速开发文件上传服务
- Spring Boot实现文件上传
- 121 项目 016 笔记向 spring boot + nginx +filezilla 文件上传
- (29)Spring boot 文件上传(多文件上传)【从零开始学Spring Boot