springboot 上传文件_基于SpringBoot的文件上传

在实际的企业开发中,文件上传是最常见的功能之一,SpringBoot集成了SpringMVC常用的功能,当然也包含了文

件上传的功能,实现起来没有太多的区别。

下面我们来讲解一下,使用SpringBoot如何实现多个文件上传操作。使用的环境是IntelliJ IDE开发工具。

开发过程如下:

1.1 配置pom.xml文件

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.springframework.boot

spring-boot-starter-parent

2.0.3.RELEASE

com.qianfeng.springboot

fileupload

0.0.1-SNAPSHOT

fileupload

Demo project for Spring Boot

1.8

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-thymeleaf

org.springframework.boot

spring-boot-starter-test

test

1.2 application.properties

1.3 Controller类

org.springframework.boot

spring-boot-maven-plugin

server.port=8080

package com.qianfeng.springboot.fileupload.controller;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;

import java.io.File;

import java.io.IOException;

@Controller

public class UploadFileController {

@RequestMapping("/uploadfile")

public String uploadOneFile(){

return "uploadonefile"; // 最终由ThymeleafView处理,转发 classpath:templates

}

@RequestMapping("/uploadfiles")

public String uploadMultiFile(){

return "uploadmultifile"; // 最终由ThymeleafView处理,转发 classpath:templates

}

/**

* 上传单个文件

* @param file

* @param request

* @return

*/

@RequestMapping(value = "/uploadsimplefile", method = RequestMethod.POST)

@ResponseBody

public String uploadSimpleFile(@RequestParam("attachment") MultipartFile file,

HttpServletRequest request) {

try {

String fileDir =

request.getSession().getServletContext().getRealPath("/upload/");

System.out.println("------->>"+fileDir);

File dir = new File(fileDir);

if (!dir.exists()) {

dir.mkdirs();

}

String fileName = file.getOriginalFilename();

File upload_file = new File(fileDir + fileName);

file.transferTo(upload_file);

} catch (Exception e) {

e.printStackTrace();

return "上传失败";

}

return "上传成功";

}

/**

* 上传多个文件

* @param file

* @param request

* @return

*/

@RequestMapping(value = "/uploadmultifile", method = RequestMethod.POST)

@ResponseBody

public String uploadMultiFile(@RequestParam("attachment") MultipartFile[] file,

HttpServletRequest request) {

try {

String fileDir =

request.getSession().getServletContext().getRealPath("/upload/");

System.out.println("------->>"+fileDir);

File dir = new File(fileDir);

if (!dir.exists()) {

dir.mkdirs();

}

for (int i=0;i

if (file[i]!=null){

uploadFile(fileDir,file[i]);

}

}

} catch (Exception e) {

e.printStackTrace();

return "上传失败";

}

return "上传成功";

}

1.4 单个文件上传的页面

/**

*

* @param uploadDir

* @param file

* @throws IOException

*/

public void uploadFile(String uploadDir,MultipartFile file) throws IOException{

String file_name = file.getOriginalFilename();

File upload_file = new File(uploadDir+file_name);

file.transferTo(upload_file);

}

}

文件上传

单个文件上传

th:action="@{/uploadsimplefile}" role="form">

文件上传:

id="attachment" placeholder="请选择邮件附件"/>

上 传

1.5 上传多个文件页面

文件上传

单个文件上传

th:action="@{/uploadmultifile}" role="form">

文件上传:

id="attachment1" placeholder="请选择邮件附件"/>

文件上传:

id="attachment2" placeholder="请选择邮件附件"/>

文件上传:

id="attachment3" placeholder="请选择邮件附件"/>

1.6 测试

1.6.1 单文件上传

启动项目后,在浏览器中输入:http://localhost:8080/uploadfile,如下所示:

b8afbe95494c0de14950242656db6aa6.png

选择单个文件上传。

1.6.2 多文件上传

在浏览器中输入:http://localhost:8080/uploadfiles,如下所示:

b3b083ebe53c86f48d69f7e61d23312e.png

选择多个文件上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看雪KSSD-windows驱动

KanXue Software Security Documentation ,简称KSSD ,是一个在线的文档浏览查阅系统 1. 书籍推荐 《windows 2000 内部揭密>>--------------------------------------这里面可以学到什么是IRP、内存管理、文件系统之类 《驱动模型设计>>-------------------------…

Linux的 i2c 驱动框架分析

1.基本概念总线设备驱动模型,是Linux 内核的一个基础,基本理论可以说按照大企业的分工原则,每个人只要负责自己的事情,向其他部门给出标准的接口调用,后勤部就负责后勤工作,厨房有可能跟后勤部产生工作上的…

java ee程序设计师_软件设计师:Java EE开发四大常用框架[1]

StrutsStruts是一个基于Sun Java EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。Struts框架可分为以下四个主要部分,其中三个就和MVC模式紧密相关:1、模型 (Model),本质上来说在Struts中Model是一个Action类(这个会在后面…

26、字符串的操作

字符串的操作 一、字符串的反向输出(逆置) /*2017年3月17日13:18:39功能:将字符串反向输出 */ #include"stdio.h" int main () {char a[100];char b[100];printf("please input one array: ");gets(a);char *pa a;char …

matlab fftshift_数字信号处理没有Matlab?用Python一样很爽

通常,在数字信号处理时,我们避不开matlab这个工具,因其它的强大的功能受到广大工程师的好评,也一直都是业界的不二之选。但是,matlab毕竟是商业软件,公司里如果使用的话,就需要支付高昂的费用。…

栈,C语言实现

什么是数据结构?数据结构是什么?要了解数据结构,我们要先明白数据和结构,数据就是一些int char 这样的变量,这些就是数据,如果你是一个篮球爱好者,那么你的球鞋就是你的数据,结构就是…

Camera摄像头工作原理

回想这工作的这几年,尝尽社会的辛酸艰难,从一开始什么都没有到30万,从30万到200万,从200万到1300万,不是炫耀,我只是想通过我自己的经历告诉我的朋友们「手机像素越高,拍的照片越清晰」摄像头结…

es6一维数组转二维数组_技术图文:Numpy 一维数组 VS. Pandas Series

背景Numpy 提供的最重要的数据结构是 ndarray,它是 Python 中 list 的扩展。Pandas 提供了两种非常重要的数据结构 Series和DataFrame。Numpy 中的一维数组与 Series 相似,一维数组只是提供了从0开始与位置有关的索引,而Series除了位置索引之…

unity UI事件

由于工作需要到持续按键,所以了解了一下unity UI事件,本文主要转载于http://www.cnblogs.com/zou90512/p/3995932.html?utm_sourcetuicool&utm_mediumreferral,并对相关问题进行解释。 我们最常用到的就是unity的button组件,…

java sar包_linux下查看最占性能的JAVA进程

记录一下自己常用的linux系统命令,方便以后查阅,发觉记忆越来越不行了找到最耗CPU的线程ps命令命令:ps -mp pid -oTHREAD,tid,time或者ps -Lfp pid结果展示:这个命令的作用,主要是可以获取到对应一个进程下的线程的一些…

电子工程学院的师兄弟姐们们,老师叫你们回家

昨天写了很长的文章,接收到推送的同学们应该也会很开心,但是由于我的原因,需要把文章删除「你们能想到的原因肯定不是我删文的原因」,但是呢,也因为这样,又可以重写一篇,刚好可以多加点内容。后…

auto.js停止所有线程_Java多线程编程基础知识 概念介绍,以及线程状态

一、进程进程是操作系统结构的基础;是一次程序的执行;是一个程序及其数据在处理机上顺序执行时所发生的活动。操作系统中,几乎所有运行中的任务对应一条进程(Process)。一个程序进入内存运行,即变成一个进程。进程是处于运行过程中…

android与js交互

首先引用一篇文章,看过这篇文章基本上就明白android大致与js是如何交互的了 Android与HTMLJS交互入门 ----------------------------分割线----------------------------------- 首先要知道js是啥,js就相当于在html内的函数方法,全称为javasc…

php调用md5.js,js中怎么使用md5加密

首先引入用法:hex_md5("123456");md5.js 文件下载:/** A JavaScript implementation of the RSA Data Security, Inc. MD5 Message* Digest Algorithm, as defined in RFC 1321.* Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.* Othe…

Linux 进程管理数据结构

文末集赞留言抽奖,我会选出留言点赞数前 3 名送出小米耳机。别刷赞啊,刷赞被举报无效,相信真的是公众号粉丝的读者,不会做这样的行为,刷赞指的是购买外挂刷,如果是转发到朋友圈和微信群的,不算刷…

USB设备驱动之设备初始化(设备枚举)

USB设备从接入HUB到正常工作之前。都属于设备枚举阶段。所谓设备枚举。就是让host控制器认识USB设备,并为其准备资源。建立好主机与设备间的数据传递机制。 该阶段的工作,是USB通信协议规定的,所以属于ISO标准流程。设备枚举阶段也相应了USB设…

如何安装python3.8_python3.8下载及安装步骤详解

1.操作系统:Windows7 64bit executable installer 2.安装步骤: 双击安装文件python-3.8.0-amd64.exe 勾选下方“Add Python 3.8 to PATH”,并选择“Customize installation”3.把Optional Features全部勾选上,点击“Next"4.A…

两台linux之间互传php脚本,linux下两台服务器实现同步的方法

本文主要和大家分享linux下实现两台服务器实时同步方法介绍,假设两个服务器:192.168.0.1 源服务器 有目录 /opt/test/和192.168.0.2 目标服务器 有目录 /opt/bak/test/,实现的目的就是保持这两个服务器某个文件目录保持实时同步。实现方式&am…

队列,C语言实现

什么是队列?上一篇文章写了什么是栈,用C语言实现了栈,既然说了栈,不说队列,感觉总是少了点什么,所以就顺手写一个队列,而且最近做项目也用到这个队列的代码。栈的特点是先进后出,队列…

ResultMap和ResultType在使用中的区别

在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解 resultType:当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相…