一文件上传

文件上传主要分以下几个步骤:

(1)新建maven java project;
(2)在pom.xml加入相应依赖;
(3)新建一个文件上传表单页面;
(4)编写controller;
(5)测试;
(6)对上传的文件做一些限制;
(7)多文件上传实现

好了,直接看代码,代码中有详细注释

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.wx</groupId><artifactId>springboot05</artifactId><version>0.0.1-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.2.RELEASE</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- jsp页面支持 --><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><scope>provided</scope></dependency><!-- jstl标签库 --><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency></dependencies><build><finalName>${project.artifactId}</finalName><plugins><!-- java编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.7</source><target>1.7</target><encoding>UTF-8</encoding></configuration></plugin><!-- 如果你不想用maven命令运行spring boot可以不用作此配置 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

页面文件

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="scheme" value="${pageContext.request.scheme}"></c:set>
<c:set var="serverName" value="${pageContext.request.serverName}"></c:set>
<c:set var="serverPort" value="${pageContext.request.serverPort}"></c:set>
<c:set var="contextPath" value="${pageContext.request.contextPath}"></c:set>
<c:set var="basePath" value="${scheme}://${serverName}:${serverPort}${contextPath}/"></c:set><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="${basePath}"><title>文件上传下载</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(e){$("[value=开始上传]").click(function(e){var userName=$("[name=userName]").val();if(userName==""){window.alert("用户名不为空");return;}var theFile=$("[name=theFile1]").val();if(theFile==""){window.alert("文件名不为空");return;}var theSubfix=theFile.substr(theFile.lastIndexOf('.')+1);theSubfix=theSubfix.toLowerCase();window.alert("ttt:"+theSubfix);var subfixs=["png","gif","jpg","jpeg","bmp"];var flag=false;for(var i=0;i<subfixs.length;i++){if(subfixs[i]==theSubfix){flag=true;break;}}if(!flag){window.alert("文件格式错误!");return;}$("[name=myFrm]").submit();});
});
</script>
</head><body>
<h1>文件上传演示</h1>
<form action="Upload.php" name="myFrm" method="post" enctype="multipart/form-data"><table border="1px"><tr><td>请输入用户名:</td><td><input type="text" name="userName"/></td></tr><!-- 第一个文件限定为图片 --><tr><td>请选择文件:</td><td><input type="file" name="theFile1"/></td></tr><tr><td>请选择文件:</td><td><input type="file" name="theFile2"/></td></tr><tr><td colspan="2"><input type="button" value="开始上传"/></td></tr></table>
</form>
</body>
</html>

配置类

package com.wx.boot;import java.nio.charset.Charset;import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.web.servlet.ErrorPage;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpStatus;
import org.springframework.http.converter.StringHttpMessageConverter;@Configuration
@ComponentScan(basePackages = "com.wx.controler.*")
public class SpringConfig {@Beanpublic StringHttpMessageConverter stringHttpMessageConverter() {StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8"));return converter;}//统一错误处理配置@Beanpublic EmbeddedServletContainerCustomizer containerCustomizer() {return new EmbeddedServletContainerCustomizer() {public void customize(ConfigurableEmbeddedServletContainer container) {//ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401.html");ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/Err404.html");ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/Err500.html");container.addErrorPages(error404Page,error500Page);}};}
}

=启动类=====

文件上传控制器类

package com.wx.controler.user;import java.io.*;
import java.util.*;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;@Controller
public class UploadController{@RequestMapping(value="/Upload.php",method=RequestMethod.POST)public ModelAndView login(HttpServletRequest request,HttpServletResponse response) throws Exception{String userName=request.getParameter("userName");HttpSession session=request.getSession();//获得文件请求对象MultipartHttpServletRequest mRequest=(MultipartHttpServletRequest)request;String targetPath=session.getServletContext().getRealPath("/")+"uploads\\";System.out.println("path:"+targetPath+",userName:"+userName);File targetDir=new File(targetPath);if(!targetDir.exists()){targetDir.mkdirs();}//键是文件表单的名称,值是文件对象Map<String, MultipartFile> fileMap = mRequest.getFileMap();Set<String> keys=fileMap.keySet();FileOutputStream fos=null;String srcName="";List<String> nameList=new ArrayList<String>();//对上传的文件进行处理,如果有多个文件表单则处理多次for(String key : keys){//原始文件名srcName=fileMap.get(key).getOriginalFilename();if(srcName==null || srcName.equals("")){break;}nameList.add(srcName);//获得输出流fos=new FileOutputStream(targetPath+srcName);//把输入流拷贝到输出流FileCopyUtils.copy(fileMap.get(key).getInputStream(), fos);}request.setAttribute("userName", userName);request.setAttribute("nameList", nameList);return new ModelAndView("ShowFile");}}

上传好了的文件的展示

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:set var="scheme" value="${pageContext.request.scheme}"></c:set>
<c:set var="serverName" value="${pageContext.request.serverName}"></c:set>
<c:set var="serverPort" value="${pageContext.request.serverPort}"></c:set>
<c:set var="contextPath" value="${pageContext.request.contextPath}"></c:set>
<c:set var="basePath" value="${scheme}://${serverName}:${serverPort}${contextPath}/"></c:set><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="${basePath}"><title>展示上传文件</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    </head><body>
<h2>上传人:${requestScope.userName }</h2>
<c:if test="${not empty requestScope.nameList}"><c:forEach items="${requestScope.nameList}" var="oneName"><h2>文件名:${oneName }  <a href="Download.php?fileName=${oneName }">下载</a></h2></c:forEach>
</c:if>
</body>
</html>

二 文件下载

package com.wx.controler.user;import java.io.FileInputStream;
import java.net.URLEncoder;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;@Controller
public class DownloadControl {@RequestMapping(value="/Download.php")public ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response) throws Exception{String fileName=request.getParameter("fileName");//对a标签提交的文件名乱码处理fileName=new String(fileName.getBytes("iso-8859-1"),"utf-8"); System.out.println("theName:"+fileName);HttpSession session=request.getSession();String filePath=session.getServletContext().getRealPath("/uploads")+"\\";FileInputStream fis=new FileInputStream(filePath+fileName);response.setContentType("application/x-msdownload");//表示以下载的方式回复客户请求fileName=URLEncoder.encode(fileName, "utf-8"); //处理客户端附件的乱码问题//设置是以附件的形式下载response.setHeader("Content-Disposition", "attachment;filename="+fileName);//获得输出流,该输出流表示对客户端请求的反馈ServletOutputStream sos=response.getOutputStream();//拷贝输入流到输出流FileCopyUtils.copy(fis, sos);sos.close();fis.close();return null;}
}

spring boot基础教程之文件上传下载相关推荐

  1. Spring Boot 利用WebUploader进行文件上传

    Web Uploader WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势 ...

  2. Spring Boot 2.X 实现文件上传(三)

    使用 SpringBoot 项目完成单个.多个文件的上传处理,并将上传的文件保存到指定目录下. 代码演示案例 所有的 HTML 页面文件 index.html <!DOCTYPE html> ...

  3. struts2教程--实现文件上传下载

    Struts2文件上传下载 一.Struts2文件上传 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 fileUpload拦截 ...

  4. bottle 文件服务器,python bottle 框架基础教程:文件上传 | linux系统运维

    文件上传,需要注意的是前端html的form表单中,要添加 enctype="multipart/form-data"属性,否则无法上传文件.在后端,用request.files方 ...

  5. Flask 的完全使用教程(文件上传下载,cookie,session,template使用)

    Flash是python下的一个轻量级web服务框架,通过Flash可以快速的搭建api服务器和各位网站,在深度学习中Flash用的最多的就是模型的部署.配合上一些c++ dll库的调用,比如这个库( ...

  6. 项目_功能模块_基于Spring Boot的文件上传下载功能的设计与实现

    文章目录 基于Spring Boot的文件上传下载功能模块的设计与实现 1.前言 2.技术栈 3.关键源码 4.实现效果 4.1.登录 4.2.文件列表 4.3.上传文件测试 4.3.1.测试图片 4 ...

  7. spring boot接收微信小程序上传的文件

    spring boot接收微信小程序上传的文件,首先前台传给我们后端的不是一个路径,而是以一个文件类型传递给我,这时我们在controller层接收时就可以用MultipartFile进行接收,如果接 ...

  8. 超详细的实现上传文件功能教程,文件上传实现。

    重要声明:本文章仅仅代表了作者个人对此观点的理解和表述.读者请查阅时持自己的意见进行讨论. 本文更新不及时,请到原文地址浏览:<超详细的实现上传文件功能教程,文件上传实现.>. 一.文件上 ...

  9. Spring Boot 基础教程:集成 Knife4j

    前言 之前介绍了如何在 Spring Boot 中集成 Swagger2 和 Swagger3,对于我们日常的接口管理已经够用了.但是作为一个颜值党,无论是 Swagger2 还是 Swagger3, ...

最新文章

  1. 将mcomaster配置以apache运行
  2. Xamarin iOS开发实战第1章使用C#编写第一个iOS应用程序
  3. Linux2.6内核--内存管理(2)--区
  4. 贪吃蛇游戏的C++代码
  5. FLEX中的MDI窗口包--flexmdi
  6. 如何在 IDEA 使用Debug 图文教程
  7. 关于产品推荐的10个问题
  8. linux下php可以实现哪些功能,基于Linux的远程管理系统的设计与实现(PHP)
  9. python 二元函数绘制_Python绘制二元函数曲面
  10. jquery加载完成后方法只执行一次_JavaScript的超级库--jQuery内容整理(3)
  11. 需求分析报告应该包含哪些部分_一份数据分析报告所需要的内容以及注意事项...
  12. win10安装SqlServer2005教程
  13. 毕设项目 - 基于SSM的教师工作考核绩效管理系统(含源码+论文)
  14. 学校固定资产管理系统由谁来做,云呐RFID固定资产管理系统
  15. JavaScript 实现简单的移动和缓动的效果
  16. 2021的科技卦象·雷·到元宇宙玩“躲猫猫”
  17. 赛效:怎么用改图宝给图片添加水印?
  18. Android百度地图POI检索无标记显示问题
  19. 双十二适合买什么东西,这些数码好物清单可以码住
  20. counters.dat_使用sys.dm_os_performance_counters对SQL Server问题进行故障排除

热门文章

  1. MybatisPlus操作模板
  2. vue实现时间选择器,精确到秒
  3. API性能优化之异步
  4. Java实现string转byte
  5. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第五章——自编解析与答案
  6. MySQL——Access|SQL Server示例数据库Northwind导入到MySQL 8.0时出错解决方案
  7. Memory Banks
  8. [NOI2001]食物链
  9. linux 后端存储,配置NFS网络存储作为cinder的后端存储
  10. Device eth0 does not seem to be present,delaying initialization.