SpringBoot文件上传
来源:互联网 发布:js json数据格式转换 编辑:程序博客网 时间:2024/05/01 09:21
技术背景:
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 */@Componentpublic 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
以及提供的四种思路
0 0
- SpringBoot文件上传
- springboot文件上传
- SpringBoot上传文件
- springboot 文件上传
- SpringBoot之文件上传
- springboot 文件上传
- SpringBoot实现文件上传
- springboot 上传文件
- Springboot 文件上传
- SpringBoot上传文件
- SpringBoot文件上传控制
- springboot上传文件
- springboot+文件上传和下载
- springboot实现多文件上传
- springboot 文件上传大小配置
- SpringBoot轻松实现文件上传
- 15.springboot实现文件上传
- SpringBoot文件上传和下载
- mysql权限管理
- HDFS 2.0 HA实现原理
- Spring Boot 正确、安全地停止SpringBoot应用服务
- 3-2
- 输入年和月份,输出这一年该月份有多少天。
- SpringBoot文件上传
- 用QML实现简单音视频播放器的实践
- WIN7安装bugzilla报错 couldn't create child process: 720002: index.cgi
- jquery获取复选框的值
- 21.>>和<<和instance of
- mysql如何提高其查询速度的方法
- struts2 action
- shell脚本中echo显示内容带颜色的实现方法
- 大数据个人学习规划