参与该项目的文件上传和下载。一旦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"/>

文件的保存做了两种方式,一种是直接存server的文件文件夹;还有一种是把文件流存入数据库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下文件上传下载非常easy明对?不喜欢servlet在这么多的代码。

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

  1. PHP实现文件上传和下载(单文件上传、多文件上传、多个单文件上传)(面向对象、面向过程)

    今天我们来学习用PHP进行文件的上传和下载,并且用面向过程和面向对象的方式对文件上传进行一个限制 一.简单的上传测试 1.客户端:upload.php 2.后端:doAction.php 结果: 二. ...

  2. WCF上传、下载、删除文件

    关键代码: --上传的stream处理,转为bytep[] private void Parse(Stream stream, Encoding encoding) { this.Success = ...

  3. mvc上传,下载,浏览文件功能(用uploadify插件)

    类 public class UpLoadFileController : Controller { // // GET: /UpLoadFile/ public ActionResult Index ...

  4. aspx 文件上传和下载,多文件上传

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="MultiFileUpload. ...

  5. Struts2实现文件上传和下载,多文件上传,限制文件大小,限制文件类型

    文件上传使用的包:commons-upload-xx.jar                                 commons-io-xx.jar 一.实现文件上传: 1.在表单空间中添 ...

  6. php实现文件上传,下载的常见文件配置

    配置文件,php.ini uploadfile  post_max_size 规定表单上传的最大文件:

  7. Open XML的上传、下载 、删除 ......文件路径

    /// <summary> /// Get download site, if download tempfolder not existed, create it first /// & ...

  8. 利用http实现文件的上传和下载

    其他语言都比较方便,使用http上传.但是C++这样就差点,不过还好,Linux下有个curl的命令行工具,这是一个开源项目,底下有个子项目是libcurl,curl就是调用这个API实现的一系列ft ...

  9. ExtJS+SpringMVC文件上传与下载

    说到文件上传.下载功能,网络上大多介绍的是采用JSP.SpringMVC或者Struts等开源框架的功能,通过配置达到文件上传.下载的目地.可是最近项目要用到文件上传与下载的功能,因为本项目框架采用开 ...

随机推荐

  1. Unity自动打包Apk

    unity打包apk相对来说比较容易,相信出过的人都明白,出包过程,没有大的难度,一步一操作,一步一等待,繁琐耗时,不懂的人又代替不了.这时候需求就来了,如何简单的一键打包搞定,这个就稍微有点难度,当 ...

  2. spring对dao层的支持(datasource的作用)

    本文大多数内容转自“http://www.cnblogs.com/liunanjava/p/4412408.html”感谢原作者 在做一个项目时,持久层并没有使用spring jpa和hibernat ...

  3. 课堂所讲整理:包装&amp;工具类

    package org.hanqi.array; import java.util.Random; public class BaoZhuang { public static void main(S ...

  4. 【JUnit4.10来源分析】0导航

    JUnit靠GOF 中的一个Erich Gamma和 Kent Beck 单元测试框架编写一个开源,yqj2065分析JUnit的主要目的是源 中学习对设计模式的运用. JUnit也是一个学习Java ...

  5. easyui 动态渲染

    $.parser.parse   这个 $("div[data-easyuisrc]").html(function () { var url = $(this).attr(&qu ...

  6. 零基础到精通Web渗透测试的学习路线

    小编相信很多新手都会遇到以下几个问题 1.零基础想学渗透怎么入手? 2.学习web渗透需要从哪里开始? 这让很多同学都处于迷茫状态而迟迟不下手,小编就在此贴给大家说一下web渗透的学习路线,希望对大家 ...

  7. hadoop性能调优

    1.平衡磁盘利用率 hadoop balancer -Threshold 20 或者 sh $HADOOP_HOME/bin/start-balancer.sh –t 20% 参数20是比例参数,表示 ...

  8. Web Components(续)

    概述 之前我们介绍了Web Components的基本概念,现在我们给出一个使用Web Components的实例代码,并且对组件化进行一些思考.记录下来,供以后开发时参考,相信对其他人也有用. 实例 ...

  9. Docker安装及常用命令

    修改机器名: [root@docker /]# hostnamectl set-hostname Docker 安装EPEL源: [root@docker /]# yum -y install epe ...

  10. ffmpeg 增加视频流媒体质量评估滤镜 (Video Multimethod Assessment Fusion, VMAF)

    URL: https://github.com/Netflix/vmaf libvmaf Obtain the VMAF (Video Multi-Method Assessment Fusion) ...