SpringMVC文件上传(一)
从这一章节开始,我们将要实现用户可以上传自己的图片。不过,这里我们先实现简单的上传,后面我们还会讲到如何通过配置文件来实现指定上传文件的路径,当然还有文件的类型确定、文件大小、文件的错误处理等。
1.视图层实现
现在我们需要在templates的路径下创建profile/uploadPage.html.
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorator="layout/default">
<head lang="en">
<title>Profile Picture Upload</title>
</head>
<body>
<div class="row" layout:fragment="content">
<h2 class="indigo-text center">Upload</h2>
<form th:action="@{/upload}" method="post" enctype="multipart/
form-data" class="col m8 s12 offset-m2">
<div class="input-field col s6">
<input type="file" id="file" name="file"/>
</div>
<div class="col s6 center">
<button class="btn indigo waves-effect waves-light"
type="submit" name="save" th:text="#{submit}">Submit
<i class="mdi-content-send right"></i>
</button>
</div>
</form>
</div>
</body>
</html>
2.控制层的实现
之后,我们需要处理的是控制层的相关逻辑。
package masterSpringMvc.profile;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@Controller
public class PictureUploadController {
public static final Resource PICTURES_DIR = new
FileSystemResource("./pictures");
@RequestMapping("upload")
public String uploadPage() {
return "profile/uploadPage";
}
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String onUpload(MultipartFile file) throws IOException {
String filename = file.getOriginalFilename();
File tempFile = File.createTempFile("pic",
getFileExtension(filename), PICTURES_DIR.getFile());
try (InputStream in = file.getInputStream();
OutputStream out = new FileOutputStream(tempFile)) {
IOUtils.copy(in, out);
}
return "profile/uploadPage";
}
private static String getFileExtension(String name) {
return name.substring(name.lastIndexOf("."));
}
}
上在代码的一个地方就是要创建pictures的文件夹,这个文件夹是项目的根目录下。这个文件的上传,需要用户注入MultipartFile的接口的文件在控制层,MultipartFile接口现在这几个方法:获取上传文件的名称、文件的大小和文件所包含的内容。这里还有一个方法值得我们去注意的,那就是IOUtils.copy的方法,这个方法就是编写一个输入流到输出流的方法。
由于我们项目用JDK8所以我们的try()部分可以写成下面的形式:
try (InputStream in = file.getInputStream();
OutputStream out = new FileOutputStream(tempFile)) {
IOUtils.copy(in, out);
}
3.总结
这一节中,我们只是简单地实现了文件的上传,可是还有很从问题,比如 文件大小、不是图片的文件等。我们该如何去处理,这个将在下面的一节中讲解。这里我们上传文件后,在pictures的文件夹下可以看到下面的结果。
源码下载:git@github.com:owenwilliam/masterSpringMVC.git
SpringMVC文件上传(一)相关推荐
- SpringMvc文件上传和下载
最近博主在做SpringMvc文件上传和下载的功能实现,上网查了很多资料很多都不太符合理想,找啊找,终于找到一个可以用的,然后再此基础上,我加以改进,可以支持多文件上传,而且代码非常精简,大家可以看看 ...
- SpringMVC文件上传功能MultipartFile参数为空
最近简单实现了一个springmvc文件上传功能,点了上传按钮一直报空指针,问题解决了mark一下留作以后查阅,如有搜到这篇文章的仅供参考,先上主要代码.springmvc.xml配置如下: < ...
- SpringMVC——文件上传下载,异步请求和SSM整合
一,SpringMVC文件上传下载 1.1 同步 1.1.1 文件上传 第一步:定义上传表单 <form action="${pageContext.request.contextPa ...
- springmvc请路径参数,springmvc-json-ajax使用,springmvc文件上传,springmvc文件下载,springmvc拦截器(内容较多)
按照操作,绝对都可以实现,亲测.....(项目所有文件和目录结构全都放上去了) idea工具,创建maven项目 第一步: 放置各种配置文件: pom.xml <?xml version=&qu ...
- Springmvc文件上传(servlet3.0)/下载(ssm)以及坑点
前言 (补充:再linux服务器上可能没用创建文件的权限,那就需要找到文件夹给权限,比如我的chmod -R 777 /home/tomcat/apache-tomcat-default/webapp ...
- SpringMVC文件上传下载和拦截器
一.文件上传:文件上传是项目开发中最常用的功能.为了能上传文件,必须将表单的method设置为post,将enctype设置为multipart/form-data.只有在这种情况下,浏览器才会把用户 ...
- SpringMVC 文件上传及下载
文件下载 inline 访问资源时如果没有设置响应头Content-Disposition,浏览器默认按照inline进行处理 inline:能显示就显示,不能显示就下载 响应头 只需修改响应头Con ...
- 四、SpringMVC文件上传
SpringMVC的文件上传,首先来分析一下: SpringMVC的工作流程 大概是止戈样的,首先前端页面发来请求,会被DispatcherServlet拦截到,通过对SpringMVC配置文件中配置 ...
- SpringBoot(SpringMVC)文件上传下载
话说,springboot不是一个全新的框架,它只是将其它框架整合在一起,提供一个"开箱即用"的环境.此文,利用的正是SpringMVC的功能. 创建springboot项目:ht ...
- 【Spring】SpringMVC文件上传与下载
对于上传功能,我们在项目中是经常会用到的,比如用户注册的时候,上传用户头像,这个时候就会使用到上传的功能.而对于下载,使用场景也很常见,比如我们项目中有个使用说明是是pdf版的,会提供给用户进行下载的 ...
最新文章
- DenseNet 测试
- Android 第三方之MPAndroidChart
- 真相了!敲代码时,程序员戴耳机究竟在听什么?
- PHP+MySql+PDO实现简单登录、注册
- linux 网卡无效 设置_Linux系统的双网卡设置
- Windows live Writer的安装配置
- linq学习笔记(5):Count/Sum/Min/Max/Avg
- 聊聊FluxFlatMap的concurrency及prefetch参数
- Android如何 如何关闭 DM-verity
- XBOX360游戏发售表(12月1日)
- jqGrid双击事件,并获取双击行的各个属性值
- C#中indexof和substring函数用法 (截取字符串)
- WPF 个人音乐播放器
- 油菜籽的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 初学实体框架EF(Entity Framework)
- 源码交易网站高仿站源网
- 基于python+django框架+Mysql数据库的校园鲜花水果商城系统设计与实现
- Epson me 打印机实现CorelDraw12中A4纸张无边距打印
- 【美丽的英文】我喜欢你是寂静的
- arp miss攻击_S6700交换机出现大量arp-miss情况