从这一章节开始,我们将要实现用户可以上传自己的图片。不过,这里我们先实现简单的上传,后面我们还会讲到如何通过配置文件来实现指定上传文件的路径,当然还有文件的类型确定、文件大小、文件的错误处理等。

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文件上传(一)相关推荐

  1. SpringMvc文件上传和下载

    最近博主在做SpringMvc文件上传和下载的功能实现,上网查了很多资料很多都不太符合理想,找啊找,终于找到一个可以用的,然后再此基础上,我加以改进,可以支持多文件上传,而且代码非常精简,大家可以看看 ...

  2. SpringMVC文件上传功能MultipartFile参数为空

    最近简单实现了一个springmvc文件上传功能,点了上传按钮一直报空指针,问题解决了mark一下留作以后查阅,如有搜到这篇文章的仅供参考,先上主要代码.springmvc.xml配置如下: < ...

  3. SpringMVC——文件上传下载,异步请求和SSM整合

    一,SpringMVC文件上传下载 1.1 同步 1.1.1 文件上传 第一步:定义上传表单 <form action="${pageContext.request.contextPa ...

  4. springmvc请路径参数,springmvc-json-ajax使用,springmvc文件上传,springmvc文件下载,springmvc拦截器(内容较多)

    按照操作,绝对都可以实现,亲测.....(项目所有文件和目录结构全都放上去了) idea工具,创建maven项目 第一步: 放置各种配置文件: pom.xml <?xml version=&qu ...

  5. Springmvc文件上传(servlet3.0)/下载(ssm)以及坑点

    前言 (补充:再linux服务器上可能没用创建文件的权限,那就需要找到文件夹给权限,比如我的chmod -R 777 /home/tomcat/apache-tomcat-default/webapp ...

  6. SpringMVC文件上传下载和拦截器

    一.文件上传:文件上传是项目开发中最常用的功能.为了能上传文件,必须将表单的method设置为post,将enctype设置为multipart/form-data.只有在这种情况下,浏览器才会把用户 ...

  7. SpringMVC 文件上传及下载

    文件下载 inline 访问资源时如果没有设置响应头Content-Disposition,浏览器默认按照inline进行处理 inline:能显示就显示,不能显示就下载 响应头 只需修改响应头Con ...

  8. 四、SpringMVC文件上传

    SpringMVC的文件上传,首先来分析一下: SpringMVC的工作流程 大概是止戈样的,首先前端页面发来请求,会被DispatcherServlet拦截到,通过对SpringMVC配置文件中配置 ...

  9. SpringBoot(SpringMVC)文件上传下载

    话说,springboot不是一个全新的框架,它只是将其它框架整合在一起,提供一个"开箱即用"的环境.此文,利用的正是SpringMVC的功能. 创建springboot项目:ht ...

  10. 【Spring】SpringMVC文件上传与下载

    对于上传功能,我们在项目中是经常会用到的,比如用户注册的时候,上传用户头像,这个时候就会使用到上传的功能.而对于下载,使用场景也很常见,比如我们项目中有个使用说明是是pdf版的,会提供给用户进行下载的 ...

最新文章

  1. DenseNet 测试
  2. Android 第三方之MPAndroidChart
  3. 真相了!敲代码时,程序员戴耳机究竟在听什么?
  4. PHP+MySql+PDO实现简单登录、注册
  5. linux 网卡无效 设置_Linux系统的双网卡设置
  6. Windows live Writer的安装配置
  7. linq学习笔记(5):Count/Sum/Min/Max/Avg
  8. 聊聊FluxFlatMap的concurrency及prefetch参数
  9. Android如何 如何关闭 DM-verity
  10. XBOX360游戏发售表(12月1日)
  11. jqGrid双击事件,并获取双击行的各个属性值
  12. C#中indexof和substring函数用法 (截取字符串)
  13. WPF 个人音乐播放器
  14. 油菜籽的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  15. 初学实体框架EF(Entity Framework)
  16. 源码交易网站高仿站源网
  17. 基于python+django框架+Mysql数据库的校园鲜花水果商城系统设计与实现
  18. Epson me 打印机实现CorelDraw12中A4纸张无边距打印
  19. 【美丽的英文】我喜欢你是寂静的
  20. arp miss攻击_S6700交换机出现大量arp-miss情况

热门文章

  1. http 性能测试. Apache ab 使用.
  2. 修改Flume-NG的hdfs sink解析时间戳源码大幅提高写入性能
  3. 菜鸟学 VB 用API在PictureBox中I划线|平移|放大|缩小 详解and分享
  4. 使用JSON作为函数的参数(转载)
  5. VXLAN详解(三)
  6. Outlook 2016最佳实践视频课程上线
  7. CentOS-6 通过rsync下载yum源
  8. MySQL数据库基础(三)——SQL语言
  9. java 利用时间生成主键
  10. 团队作业——四则运算网页版