【SpringMVC】文件上传

今天药忘吃喽~ 2022-06-05 12:46 479阅读 0赞

文件上传自然是一个网站必不可少的元素之一,SpringMVC这个网站编程框架自然也有这个东西,下一面举一个例子说明这个问题。

如下图所示,一个简单的上传控件,只让上传bmp、gif、jpg/jpeg、png这些图片文件,成功上传之后并现实,而类似exe这些东西则不让上传,返回信息。

20171128113547828

一、基本配置

1、首先,在做SpringMVC的文件上传之前,除了在《【Spring】Spring3.x的下载与配置》(点击打开链接)提到的所有Spring包,还需要自己配个commons-io.jar、commons-fileupload.jar,这两个东西Apache的官网直接有,网址如下:

Apache Commons IO 2.6 (requires JDK 1.7+):http://commons.apache.org/proper/commons-io/download_io.cgi

20171128114257122

Apache Commons FileUpload 1.3.3 (requires Java 1.5 or later):http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi

20171128114412892

下载之后解压,取走里面的commons-io-2.6.jar和commons-fileupload-1.3.3.jar放到你的网站project下的WEB-INF\lib里面,lib文件夹最终应该有的包,如下图所示:

20171128114602737

这就配置完毕了

好吧,我也不知道为何SpringMVC不将这2个这么重要和常用的jar包都不和自己的Spring捏在一起,只能自己配一下咯!

二、制作过程

1、目录结构和《【SpringMVC】Helloworld》(点击打开链接)可以说是几乎完全一样。只是多了一个upload文件夹用来放上传文件。

20171128114858505

然后web.xml也做了点小修改,所有action都加了个.html后缀,伪静态。具体见《【SpringMVC】指明actions的后缀》(点击打开链接),这不是本文的重点。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  5. version="3.0">
  6. <servlet>
  7. <servlet-name>SpringMVC</servlet-name>
  8. <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  9. </servlet>
  10. <servlet-mapping>
  11. <servlet-name>SpringMVC</servlet-name>
  12. <url-pattern>*.html</url-pattern>
  13. </servlet-mapping>
  14. </web-app>

2、在SpringMVC-servlet.xml这个文件中,需要初始化multipartResolver这个系统自带的类,并且写入上传设置的信息。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:mvc="http://www.springframework.org/schema/mvc"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  8. http://www.springframework.org/schema/context
  9. http://www.springframework.org/schema/context/spring-context-2.5.xsd
  10. http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
  11. <context:component-scan base-package="test.actions" />
  12. <bean
  13. class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  14. <property name="prefix" value="/views/" />
  15. <property name="suffix" value=".jsp" />
  16. </bean>
  17. <!-- 上传文件的设置,maxUploadSize=-1,表示无穷大。 -->
  18. <bean id="multipartResolver"
  19. class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
  20. p:defaultEncoding="UTF-8" p:maxUploadSize="-1" />
  21. </beans>

3、之后在主页views/index.jsp写一个基本前端布局,打印提示信息的p、文件上传域还有一个放图片的img,很基本的前端知识,没什么好讲的。

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>主页</title>
  8. </head>
  9. <body>
  10. <p style="color:red">${message}</p>
  11. <form action="fileUpload.html" method="post" enctype="multipart/form-data">
  12. 选择文件:<input type="file" name="file"><input type="submit" value="提交">
  13. </form>
  14. <img src="${upload_url}" />
  15. </body>
  16. </html>

4、最后关键是在webActions.java这个文件,具体见注释。

  1. package test.actions;
  2. import java.io.File;
  3. import javax.servlet.http.HttpServletRequest;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.ui.ModelMap;
  6. import org.springframework.web.bind.annotation.RequestMapping;
  7. import org.springframework.web.bind.annotation.RequestParam;
  8. import org.springframework.web.multipart.MultipartFile;
  9. @Controller
  10. public class webActions {
  11. /* 跳转到主页 */
  12. @RequestMapping(value = "/index")
  13. public String index() {
  14. return "index";
  15. }
  16. /* 上传的action */
  17. @RequestMapping("/fileUpload")
  18. public String fileUpload(@RequestParam("file") MultipartFile file,
  19. HttpServletRequest request, ModelMap model) {
  20. // 判断文件是否为空
  21. if (!file.isEmpty()) {
  22. String prefix = file.getOriginalFilename().substring(
  23. file.getOriginalFilename().lastIndexOf(".") + 1);// 取文件的后缀名,取文件名是file.getOriginalFilename(),而不是file.getName(),那是取表单文件域的name,这里是file。
  24. if (prefix.equals("bmp") || prefix.equals("jpg")
  25. || prefix.equals("jpeg") || prefix.equals("gif")
  26. || prefix.equals("png")) {// 如果是图片
  27. try {
  28. String filePath = request.getSession().getServletContext()
  29. .getRealPath("/")
  30. + "upload/" + file.getOriginalFilename();// 文件保存路径,先取出本工程在服务器的真实物理路径再补个upload
  31. file.transferTo(new File(filePath));// 转存文件
  32. model.addAttribute("message", file.getOriginalFilename()
  33. + "文件上传成功!");// 提示信息
  34. String contextpath = request.getScheme() + "://"
  35. + request.getServerName() + ":"
  36. + request.getServerPort()
  37. + request.getContextPath();// 取去当前的网站的url
  38. String upload_url = contextpath + "/upload/"
  39. + file.getOriginalFilename();// 再补个/upload/文件名,则是文件在网络的真实url
  40. model.addAttribute("upload_url", upload_url);// 压给前端的img使用
  41. } catch (Exception e) {
  42. e.printStackTrace();
  43. }
  44. } else {
  45. model.addAttribute("message", "请上传图片!");
  46. }
  47. }
  48. return "index";
  49. }
  50. }

至此,制作完成。

发表评论

表情:
评论列表 (有 0 条评论,479人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringMVC文件

    文件上传自然是一个网站必不可少的元素之一,SpringMVC这个网站编程框架自然也有这个东西,下一面举一个例子说明这个问题。 如下图所示,一个简单的上传控件,只让上传bmp、

    相关 SpringMVC_文件

    一、文件上传 1、说明 SpringMVC为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的。Spring用 Jak