springmvc和servlet下的文件上传和下载(存文件目录和存数据库Blob两种方式)

项目中涉及了文件的上传和下载,以前在struts2下做过,今天又用springmvc做了一遍,发现springmvc封装的特别好,基本不用几行代码就完成了,下面把代码贴出来:

FileUpAndDown.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>using commons Upload to upload file</title>
</head>
<script type="text/javascript">
function downFile(){
	var fileId = document.getElementById("fileId").value;
	location.href="fileDownload?fileId=" + fileId;
}
</script>
<style>
* {
	font-family: "宋体";
	font-size: 14px
}
</style>
<body>
	<p align="center">文件上传下载</p>
	<form id="form1" name="form1" method="post" action="fileUpload" enctype="multipart/form-data">
		<table border="0" align="center">
			<tr>
				<td>上传文件:</td>
				<td><input name="file" type="file" size="20"></td>
			</tr>
			<tr>
				<td></td>
				<td><input type="submit" value="提交"> <input type="reset" name="reset" value="重置"></td>
			</tr>
		</table>
	</form>
	<div align="center">
	<input type="text" id="fileId"><input type="button" value="根据Id下载文件" onclick="javascript:downFile()">
	</div>
</body>
</html>

FileUpAndDownController.java

@RequestMapping(value = "/fileUpload")
	public String upload(
			@RequestParam(value = "file", required = false) MultipartFile file,
			HttpServletRequest request, ModelMap model) throws IOException {

		/*
		// 方式一:保存文件目录
		try {
			String path = request.getSession().getServletContext().getRealPath("/");// 文件保存目录,也可自定为绝对路径
			String fileName = file.getOriginalFilename();// getOriginalFilename和getName是不一样的哦
			System.out.println(path);
			File targetFile = new File(path, fileName);
			if (!targetFile.exists()) {
				targetFile.mkdirs();
			}
			file.transferTo(targetFile);
		model.addAttribute("upload.message", request.getContextPath() + "/upload/" + fileName);
		} catch (Exception e) {
			e.printStackTrace();
		}
		 */
		// 方式二:保存入库
		Map<String, Object> insertMap = new HashMap<String, Object>();
		insertMap.put("byt", file.getBytes());
		insertMap.put("fileName", file.getOriginalFilename());

		int flag = fileUpAndDownMapper.saveFileInfo(insertMap);
		if(flag > 0)
			model.addAttribute("upload.message", "success");
		else
			model.addAttribute("upload.message", "failure");
		return "/core/param/businessparam/uploadResult";
	}

FileUpAndDownMapper.xml(对应的数据库为db2,保存blob类型)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
	namespace="com.xx.persistence.FileUpAndDownMapper">

	<resultMap id="fileBean" type="com.xx.web.FileUpAndDown">
		<id column="ID" property="id" jdbcType="INTEGER" />
		<result column="FILENAME" property="fileName" jdbcType="VARCHAR" />
	    <result column="TESTA" property="testa" javaType="byte[]" jdbcType="BLOB" typeHandler="org.apache.ibatis.type.BlobTypeHandler" />
	    <result column="FILESTREAM" property="fileStream" javaType="byte[]" jdbcType="BLOB" typeHandler="org.apache.ibatis.type.BlobTypeHandler" />
	</resultMap>  

	<insert id="saveFileInfo" parameterType="java.util.HashMap">
	INSERT INTO BLOBTEST(FILENAME, FILESTREAM)
	VALUES(#{fileName}, #{byt, javaType=byte[], jdbcType=BLOB, typeHandler=org.apache.ibatis.type.BlobTypeHandler})
	</insert>

    <select id="getFileByPk" resultMap="fileBean" parameterType="int">
      SELECT * FROM BLOBTEST WHERE ID=${value}
     </select>
</mapper>

uploadResult.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>uploadResult</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
</head>
<body>
	<a href="fileManagePage">上传文件</a> ${requestScope['upload.message'] }
</body>
</html>

以上为springmvc下上传文件的Demo,其中很关键的一步是,spring的配置文件中要加入文件上传的支持:

<!-- 支持上传文件 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

文件的保存做了两种方式,一种是直接存服务器的文件目录;另一种是把文件流存入数据库blob字段内(项目的特需要求)

下面是文件下载的代码:

@ResponseBody
	@RequestMapping(value = "/fileDownload")
	public void fileDownload(HttpServletRequest request,
			HttpServletResponse response) throws IOException {
		String fileId = request.getParameter("fileId");
		FileUpAndDown file = fileUpAndDownMapper.getFileByPk(Integer.parseInt(fileId));
		byte[] fileStream = file.getFileStream();
		String fileName = file.getFileName();

		// 以流的形式下载文件
		response.setContentType("application/octet-stream");
		response.setHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes("gb2312"), "ISO8859-1" ) + "\"");
		OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
		toClient.write(fileStream);
		toClient.flush();
		toClient.close();
	}

springmvc下文件上传下载很简单明了吧?不必像servlet下那么多的代码。

springmvc和servlet下的文件上传和下载(存文件目录和存数据库Blob两种方式),布布扣,bubuko.com

时间: 2025-01-02 15:59:56

springmvc和servlet下的文件上传和下载(存文件目录和存数据库Blob两种方式)的相关文章

使用jsp/servlet简单实现文件上传与下载

使用JSP/Servlet简单实现文件上传与下载 通过学习黑马jsp教学视频,我学会了使用jsp与servlet简单地实现web的文件的上传与下载,首先感谢黑马.好了,下面来简单了解如何通过使用jsp与servlet实现文件上传与下载. 在写代码之前,我们需要导入两个额外的jar包,一个是common-io-2.2.jar,另一个是commons-fileupload-1.3.1.jar,将这个两个jar 包导入WEB-INF/lib目录里. 首先,想要在web端即网页上实现文件上传,必须要提供

springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)

参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>using commons Upload to

FileUpload系列:(3)文件上传和下载示例

示例由1个Servlet和3个JSP组成. 1.FileServlet package com.rk.web.servlet; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URLEncoder; import java.util.Has

struts2(六) 文件上传和下载

前面对文件下载提过一点点,这里正好要讲文件上传,就放在一起在说一遍. --WH 一.单文件上传 在没学struts2之前,我们要写文件上传,非常麻烦,需要手动一步步去获取表单中的各种属性,然后在进行相应的处理,而在struts2中就不需要了,因为有一个fileUpload拦截器帮我们全做完了.我们只需要添加一点点信息,就可以完成上传的功能. 1.Action中需要提供三个属性 File fieldName: //文件表单项名称,也就是上传控件所填写的name属性名 String fileCont

SpringMvc文件上传和下载

本篇博客将讲解的是Springmvc的文件上传和下载功能.对于上传功能,我们在项目中是经常会用到的,比如用户注册的时候,上传用户头像,这个时候就会使用到上传的功能.而对于下载,使用场景也很常见,比如我们项目中有个使用说明是是pdf版的,会提供给用户进行下载的功能.相对于来说,这两个功能都是很常见,废话不多说,按照惯例,我们先来看一下本篇博客的目录. 目录 一:搭建SpringMvc开发环境 二:实现文件上传的功能 三:将上传文件绑定到具体的对象上 四 : 实现用户下载的功能 五:总结 一:搭建S

SpringMVC:文件上传和下载

SpringMVC:文件上传和下载 准备工作 文件上传是项目开发中最常见的功能之一 ,springMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下其不能处理文件上传工作.如果想使用Spring的文件上传功能,则需要在上下文中配置MultipartResolver. 前端表单要求:为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data.只有在这样的情况下,浏览

SpringMVC文件上传和下载的实现

SpringMVC通过MultipartResolver(多部件解析器)对象实现对文件上传的支持. MultipartResolver是一个接口对象,需要通过它的实现类CommonsMultipartResolver来完成文件的上传工作. 1.使用MultipartResolver对象,在XML中配置Bean. 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://

servlet+jsp实现的文件上传与下载

java文件上传与下载 通过微表单元苏设置Method = "post" enctype = "multipart/form-data"属性,让表单提交的数据以二进制编码的方式提交,在接收此请求的Servlet 中用二进制流来获取内容,就可以取得上传文件的内容,从而实现文件的上传. 表单ENCTYPE属性 application/x-www-form-urlencoded :这是默认的编码方式,它只处理表单域里的value属性值.采用 这种编码方式的表单会将表单域的

centos 6.5下安装文件上传下载服务

centos 6.5下安装文件上传下载服务 由于每次在CentOS中要下载一些配置文件到物理机,和上传一些文件到服务器,导致来回的开启ftp软件有点麻烦,这里我们可以使用文件上传下载服务,来解决上传和下载的问题. 1.登录服务器 2.执行命令:yum -y install lrzsz 3.执行rz命令进行文件上传.(注意,如果文件为二进制文件则需要执行:rz -be) 4. 执行[sz 文件名]命令进行文件下载.