springmvc之文件的上传和下载_小白毛的博客-程序员秘密

技术标签: java-springmvc  

一、文件的上传

1.upload.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- 设置表单的类型,是上传文件 
			enctype="multipart/form-data"
			
		请求方式: 数据量比较大
			POST	
	-->
	<form action="/springmvc/file/upload.do" method="POST" enctype="multipart/form-data">		
		选择文件
			<input type="file" name="file" />		
			<input type="submit" value="上传" />		
	</form>
</body>
</html>

2.FileController.java

package com.yc.controller;

import java.io.File;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

@Controller
@RequestMapping(value = "/file/")
public class FileController {

	@RequestMapping(value = "upload")
	// @RequestParam MultipartFile file 说明是获取前端传递过来的文件
	public String upload(@RequestParam MultipartFile file, HttpServletRequest request) {

		System.out.println("upload 进来的:" + file);
		// 拿到文件 ===> 保存到服务器目录

		String fileName = file.getOriginalFilename();

		System.out.println("fileName: " + fileName);

		// 1. 服务器的根目录
		// 当前线程 类加载的位置 找根路径的资源 转换为地址
		// String path =
		// Thread.currentThread().getContextClassLoader().getResource(".").getPath();

		// 网站根目录
		String path = request.getServletContext().getRealPath("/");

		System.out.println("path: " + path);

		// 2. 创建新文件
		// 新文件路径 . File.separator 获取系统的分隔符
		// / linux
		// \ windows
		// String newFilePath = path + File.separator + fileName;

		String newFilePath = path + File.separator;
		newFilePath += ("upload" + File.separator);
		newFilePath += fileName;

		// 自己的文件夹路径

		// 创建的新的文件
		File newFile = new File(newFilePath);

		// 判断文件夹路径是否存在?
		File parent = newFile.getParentFile();
		if (!parent.exists()) { // 如果父文件夹不存在
			parent.mkdirs(); // 那么就创建文件夹
		}

		// 将文件转换到新文件中
		try {
			file.transferTo(newFile);
		} catch (Exception e) {
			e.printStackTrace();
		}

		System.out.println(path);

		HttpSession session = request.getSession();

		session.setAttribute("img", fileName);

		return "upload-success.html";
	}
}

3.upload-success.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	上传成功!
</body>
</html>

4.springmvc.xml文件配置支持

<!-- 上传文件 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
     <property name="defaultEncoding" value="utf-8" />
     
     <!-- 最大上传大小 104857600 字节 ~  100M -->
     <property name="maxUploadSize" value="104857600"/>
     
     <!-- 最大上传服务器的内存大小  -->
     <property name="maxInMemorySize" value="4096"/>
</bean>

5.测试


上传成功后会跳转至upload-success.html


在eclipse控制台中也可以看到我们输出的图片存放路径


打开文件夹就可以看到上传的文件

//在上述类中,只用于测试是否上传成功,并未做文件重名会覆盖的问题修改。

二、文件下载

依然是我们的upload-success.html页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	上传成功!
<!-- /springmvc/file/download
 -->
<a href="/springmvc/file/download.do">下载</a>
</body>
</html>
<script src="/springmvc/js/jquery.min.js"></script>
<script>
//http://localhost:8080/springmvc/file/getImgName.do
$.ajax({
	url: "/springmvc/file/getImgName.do",
	dataType: "json",
	success: function(data) {
		// alert(data.img)
		var filePath = "/springmvc/upload/" + data.img;		
		// 利用 jQuery生成1张图片
		var oImg = $('<img src="'   + filePath +  '" />')		
		// 添加到body元素
		$("body").append(oImg);
	}
})	
</script>


FileController.java文件中加入两个方法

@ResponseBody // 返回结果是1个json数据
	@RequestMapping("getImgName")
	public Map<String, Object> getImgName(HttpSession session) {

		String img = (String) session.getAttribute("img");

		Map<String, Object> map = new HashMap<String, Object>();

		map.put("img", img);

		return map;
	}
	@RequestMapping(value = "download")
	// HttpServletResponse response 向页面中输出内容
	public String download(HttpSession session, HttpServletRequest request, HttpServletResponse response) {

		// 1. 找到文件
		String fileName = (String) session.getAttribute("img");

		response.setCharacterEncoding("utf-8");
		response.setContentType("multipart/form-data");

		// 告诉浏览器,当前传输的内容是1个附件文件
		response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);

		// 获取到上传文件的路径
		String path = request.getServletContext().getRealPath("upload");
		String filePath = path + File.separator + fileName;

		try {
			FileInputStream is = new FileInputStream(filePath);

			// 获取输出的对象
			ServletOutputStream os = response.getOutputStream();

			// 创建数组值
			byte[] b = new byte[1024];

			int len = 0;
			// 如果输入流中一直有内容的话,就一直读
			while ((len = is.read(b)) > 0) {
				os.write(b);
			}
			// 关闭http输出流
			os.close();

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return "/file/upload-success.html";
	}

测试


提示文件下载成功。



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41876436/article/details/80945729

智能推荐

计算机的新技术未来发展趋势论文,计算机最新技术发展趋势毕业论文_蔚N色的博客-程序员秘密

计算机最新技术发展趋势毕业论文怎么写?免费整理了海量优秀的学术性计算机最新技术发展趋势毕业论文范文供大学毕业生和在职学者阅读与下载,是免费计算机最新技术发展趋势毕业论文网,包含相关的本科毕业论文与硕士毕业论文还有职称论文以及关于计算机最新技术发展趋势毕业论文格式模板和开题报告和文献综述,为您的计算机最新技术发展趋势毕业论文写作从选题到提纲再到正文写作提供有价值的参考文献.新时期德育课程发展趋势色的...

【你好Ribbon】十一:Ribbon负载均衡服务选取规则组件IRule-客户端可配置规则ClientConfigEnabledRoundRobinRule_JAVA,你好!的博客-程序员秘密

每日一句伟人所达到并保持着的高处,并不是一飞就到的,而是他们在同伴们都睡着的时候,一步步艰辛地向上攀爬的目录前言ClientConfigEnabledRoundRobinRuleBestAvailableRulePredicateBasedRuleAbstractServerPredicate前言上一篇我们介绍了IRule的比较简单的线性轮询的规则,本文继续来探讨其他的规则实现。ClientConfigEnabledRoundRobinRule和他的子类们。ClientConfigEnable

CSS transform的rotate,内部元素旋转到背后仍会显示。_transform 移出视窗 还显示_cithegod的博客-程序员秘密

在写代码的时候出现了一个问题,当使用了CSS3的transform的时候,对下面这个元素进行旋转://DOM元素的结构<figure class="img-figure"> <img src="/assets/97aa04cee801bdd3b8762057267d0767.jpg" alt="This is a beauty"> <figcaption> <h2

jQuery 里面的attr()方法_jquery attr方法_种种的种的博客-程序员秘密

这个是上个星期在公司的时候遇到的问题,都不知道在学校学的啥一直没有弄清楚,趁着周末好好补补。说说attr()这个方法吧。 这里写一段通用的代码:<body><p title="你最喜欢的水果是。">你最喜欢的水果是?</p><ul> <li title="苹果汁">苹果</li> <li title="橘子汁" value="123">橘子</li> <li title="菠

卸载postgresql_postgre完全卸载_陈家小子的博客-程序员秘密

卸载dpkg --list | grep postgresql dpkg --purge orsudo apt-get --purge autoremove postgresql*

华为 交换机 路由器 Telnet服务器_weixin_34162629的博客-程序员秘密

Telnet服务器[Huawei]int g0/0/0 进入端口[server-GigabitEthernet0/0/0]ip add 192.168.1.254 24 端口加IP[server]user-interface vty 0 4 五用户登录[server-ui-vty0-4]authentication-mode a...

随便推点

百度收录突然减少的主要原因有哪些_优优蜘蛛池丶的博客-程序员秘密

之前看到有人分析google和百度在网站收录上的差别,相信站长们都有体会,最直观的就是google对于网站目录挖掘的更深,收录的更快,而百度感觉得使劲给它喂料,还必须把需要收录的页面尽量放在关键位置,比如首页。就着重分析下百度在收录方面的特点。1、网站有过大换血,如改版网站一旦改版后,原来网站的结构都会发生变化,这样百度发现你网站机构和以前的完全不一样,就会觉得你网站有些陌生,肯定蜘蛛短时间内会不来光顾你的站了,但是也有这样的情况,就是改版后发现网站收录暴增,这种情况很常见,但是千万别高兴得太早,这种网

绩效考核软件,强势助力二、三级公立医院绩效大考_szmesoft米软科技的博客-程序员秘密

对公立医院而言,未来相当长一段时间都要处于“国考”的情境中。公立医院绩效考核,是引领公立医院综合改革向纵深推进的重要抓手,也是推进医院高质量发展的重要举措。2020年6月9日,国家卫健委发布了《关于采集二级和三级公立医院2019年度绩效考核数据有关工作的通知》,要求参加2019年度绩效考核的二级公立医院,于2020年7月1日—8月15日期间,将2017年—2019年的住院病案首页数据上传至国家医院质量监测系统。这也是二级公立医院首次在“国考”中“亮相”。绩效考核是通过管理改进去改善指标的结果,提升医

获取全文的13种方法_luckisok的博客-程序员秘密

注:由于大部分院校未能购卖国内外商业医学数据库,如PUBMED、ElseVier等,因而检索国外全文文献很复杂。这往往成为少数学校的专利。北大医学院网站上有大量文献题录,但仅供自已学生使用!这太可惜了,由于版权等多种原因,下面介绍一些可行的方法。1、根据作者E-mail地址,向作者索要。这是最有效的方法之一。为了更方便大家向作者索取原文,但一定要简洁!一般都愿意向你提供。下面是模板: Dear D

在react项目中使用阿里iconfont字体库的svg图标_react svg支持fontsize_gaoshanyangzhi_1999的博客-程序员秘密

阿里矢量图库阿里矢量图标库是国内功能很强大且图标内容很丰富的矢量图标库,提供矢量图标下载、在线存储、格式转换等功能,是阿里巴巴体验团队倾力打造,设计和前端开发的便捷工具。在很多项目中,我们会使用到大量的小图标,这种情况下,使用字体来实现图标就有很多优势:字体文件小; 容易编辑和维护,尺寸和颜色可以用css来控制。使用形式分为三种:unicode引用、font-class引用、symbol引用...

vscode开发ROS(3)-创建第一个ROS项目_哇风的博客-程序员秘密

创建根目录点击"文件"–&gt;“打开文件夹”–&gt;”创建文件夹",磁盘上选择一个路径A(此处A代表你的保存文件夹的路径),输入文件夹名称,例如:test,点击确定。此时在左侧资源管理器中,会自动生成一个".vscode"文件夹,会自动生成"c_cpp_properties.json" 和”setting.json“两个文件。配置ros空间1, 点击创建"src"文件夹注意:(正常来说,vscode 安装 ros插件就会自动生成)如果此处不自动生成c_cpp_properties.jso.

office2019初体验与kms服务器搭建_kms office2019_尹傲雄的博客-程序员秘密

office2019初体验  很早就知道看到过 office2019 出预览版了,但是一直没有找到合适的方式进行安装,然后最近偶然发现了一个office2019安装的教程(还附带发现了一个好用的office管理工具)就果断安上。首先来张 office2019 的 word 截图看看。  可以看出来在界面上 office2019 和 office2016 基本没有区别,不看启动动画和版本...

推荐文章

热门文章

相关标签