SpringBoot实现文件上传

原创 2017年09月04日 22:14:46

用SpringBoot实现服务器,然后用java和html5实现客户端进行上传测试。

一、服务器端接口程序。为省事就在controller中写了,正式的程序我喜欢放在service这一层进行处理调用。

@RestController
@RequestMapping("/file")
public class FileController {
    /**
     * 单文件上传
     *
     * @param file
     * @param request
     * @return
     */
    @PostMapping("/upload")
    @ResponseBody
    public String upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
        if (!file.isEmpty()) {
            String saveFileName = file.getOriginalFilename();
            File saveFile = new File(request.getSession().getServletContext().getRealPath("/upload/") + saveFileName);
            if (!saveFile.getParentFile().exists()) {
                saveFile.getParentFile().mkdirs();
            }
            try {
                BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(saveFile));
                out.write(file.getBytes());
                out.flush();
                out.close();
                return ResultUtils.buildResult(saveFile.getName() + " 上传成功");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                return ResultUtils.buildResult("上传失败," + e.getMessage());
            } catch (IOException e) {
                e.printStackTrace();
                return ResultUtils.buildResult("上传失败," + e.getMessage());
            }
        } else {
            return ResultUtils.buildResult("上传失败,因为文件为空.");
        }
    }

    /**
     * 多文件上传
     *
     * @param request
     * @return
     */
    @PostMapping("/uploadFiles")
    @ResponseBody
    public String uploadFiles(HttpServletRequest request) throws IOException {
        File savePath = new File(request.getSession().getServletContext().getRealPath("/upload/"));
        if (!savePath.exists()) {
            savePath.mkdirs();
        }
        List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
        MultipartFile file = null;
        BufferedOutputStream stream = null;
        for (int i = 0; i < files.size(); ++i) {
            file = files.get(i);
            if (!file.isEmpty()) {
                try {
                    byte[] bytes = file.getBytes();
                    File saveFile = new File(savePath, file.getOriginalFilename());
                    stream = new BufferedOutputStream(new FileOutputStream(saveFile));
                    stream.write(bytes);
                    stream.close();
                } catch (Exception e) {
                    if (stream != null) {
                        stream.close();
                        stream = null;
                    }
                    return "第 " + i + " 个文件上传有错误" + e.getMessage();
                }
            } else {
                return "第 " + i + " 个文件为空";
            }
        }
        return "所有文件上传成功";
    }
}
但是大于1MB的文件上传时会提示出错的,所以要进行设置。添加一个配置文件就可以了。

@Configuration
public class FileUploadConfig {

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setMaxFileSize("100MB"); 
        factory.setMaxRequestSize("100MB");
        return factory.createMultipartConfig();
    }
}
也可以在application.properties中加入这两句:


spring.http.multipart.maxFileSize=100Mb
spring.http.multipart.maxRequestSize=100Mb

二者选其一即可。

2.java客户端测试程序,Android端也是如此,我是用retrofit2框架,以下是三部分代码:

接口:

public interface TestService {

    //文件上传
    @Multipart
    @POST("upload")
    Call<NetResult<Object>> upload(@Part MultipartBody.Part part);

}

API部分:

public class TestApi extends NetApi {
    private static String BASE_URL = "http://192.168.1.101:8080/springbootdemo/file/";
    private static TestService service = NetClient.getRetrofit(BASE_URL).create(TestService.class);
    
    //文件上传
    public static void upload(File file, NetCallback<Object> callback) {
        RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), file);
        MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), body);
        Call call = service.upload(part);
        call.enqueue(callback);
        NetManager.addRequest(call);
    }

}

测试调用:

public class Test {
    public static void main(String[] args) {
        String filePath = "E://被遗忘的时光.ape";
        File file = new File(filePath);
        NetCallback<Object> callback = new NetCallback<Object>() {
            @Override
            protected void onComplete(NetResponse<Object> netResponse) {
            }
        };
        TestApi.upload(file, callback);
    }
}

测试成功上传!!!

三、HTML5页面单文件上传和多文件上传

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<form action="http://192.168.1.101:8080/springbootdemo/file/upload"
      method="post"
      enctype="multipart/form-data">
    文件:<input type="file" name="file"/>
    <input type="submit" value="上传"/>
</form>
</body>
</html>

测试成功!!!!!!!!!!!!!!!!!!!!!!!



版权声明:本文为博主原创文章,未经博主允许不得转载。

详细全面的 SpringBoot 文件上传

这些天忙着刷题,又怕遗忘了spring boot, 所以抽出一点时间折腾折腾,加深点印象。 spring boot 的文件上传与 spring mvc 的文件上传基本一致,只需注意一些配置即可。...
  • change_on
  • change_on
  • 2017年03月02日 15:42
  • 26275

Spring Boot 文件上传

使用SpringBoot进行文件上传的方法和SpringMVC差不多,本文单独新建一个最简单的DEMO来说明一下。 主要步骤包括: 1、创建一个springboot项目工程,本例名称(demo-u...
  • catoop
  • catoop
  • 2017年03月11日 13:56
  • 25500

如何用SpringBoot框架来接收multipart/form-data文件

今天遇到一个坑,这里给大家介绍一下。 现在很多文件上传类型都是multipart/form-data类型的,HTTP请求如下所示: 可是问题就在于如果用传统的Struts2或者servlet等都可...
  • linzhiqiang0316
  • linzhiqiang0316
  • 2017年08月09日 21:27
  • 5952

SpringBoot下文件上传与下载的实现

本文欢迎转载,转载请注明出处,谢谢~(作者:喝酒不骑马 Colton_Null) from CSDNSpringBoot后台如何实现文件上传下载?最近做的一个项目涉及到文件上传与下载。前端上传采用百...
  • Colton_Null
  • Colton_Null
  • 2017年08月05日 00:40
  • 2690

SpringBoot文件上传

技术背景: springboot+maven+restful服务 首先分成三部分: 1.引入maven依赖包,主要是io和upload两个依赖,上代码: ...
  • u010892841
  • u010892841
  • 2017年01月22日 17:29
  • 589

Spring boot 文件上传(多文件上传)

转:http://412887952-qq-com.iteye.com/blog/2293385 文件上传主要分以下几个步骤: (1)新建maven java project; (2)在po...
  • u014695188
  • u014695188
  • 2016年09月01日 12:47
  • 8670

Springboot 之 多文件上传-知识林

本文章来自【知识林】文件上传在各种网站平台上应用都非常广泛,这篇文章将讲述在Springboot中是如何完成文件上传的,Springboot是打包运行的,上传后的文件又该何去何从?这篇文章需要用到前面...
  • zsl129
  • zsl129
  • 2016年11月03日 12:00
  • 442

SpringBoot文件上传下载和多文件上传(图文详解)

最近在学习SpringBoot,以下是最近学习整理的实现文件上传下载的java代码: 1、开发环境: IDEA15+ Maven+JDK1.8 2、新建一个maven工程: 3、工程框架 ...
  • Coding13
  • Coding13
  • 2017年01月16日 20:16
  • 27525

SpringBoot轻松实现文件上传

题记: 上传文件在我们的功能中十分常见,刚开始接触的程序员,可能觉得java上传文件怎么比php这么复杂,的确,PHP上传文件可以简单到就一句话并且不需要我们自己加载函数啊,包啊,类啊什么的,而ja...
  • qq_28336351
  • qq_28336351
  • 2017年08月02日 03:54
  • 637

springboot 文件上传大小配置

springboot上传文件大小的配置我这里记录两种,一种是设置在配置文件里只有两行代码,一种是加个Bean 首先第一种: application.properties中添加 spring.htt...
  • shi0299
  • shi0299
  • 2017年04月07日 13:28
  • 13337
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SpringBoot实现文件上传
举报原因:
原因补充:

(最多只允许输入30个字)