参与该项目的文件上传和下载。一旦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. 微信小程序云开发-云存储-上传、下载、打开文件文件(word/excel/ppt/pdf)一步到位

    一.wxml文件 <!-- 上传.下载.打开文件一步执行 --> <view class="handle"> <button bindtap=&quo ...

  2. springmvc模式下的上传和下载

    接触了springmvc模式后,对上一次的上传与下载进行优化, 上次请看这里. 此处上传的功能依旧是采用表格上传.文件格式依旧是 <form action="${pageContext ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 房费制VB版本(一个)——系统分析

          首先.我们先回答两个个问题:         1.机房收费系统"是什么"?         2.机房收费系统应该"干什么"?        我的回答 ...

  2. HDU 3366 Passage (概率DP)

    Passage Problem Description Bill is a millionaire. But unfortunately he was trapped in a castle. The ...

  3. Codeforces 439C Devu and Partitioning of the Array(模拟)

    题目链接:Codeforces 439C Devu and Partitioning of the Array 题目大意:给出n个数,要分成k份,每份有若干个数,可是仅仅须要关注该份的和为奇数还是偶数 ...

  4. php:的图形计算器的面向对象的版本武器2

    通过自带部分result.class.php分流,由于这三个类继承shape这个类,让我们来看看,面向对象的继承. shape.class.shape档 <?php abstract class ...

  5. cidaemon.exe是什么进程及怎样关闭cidaemon.exe进程

    问题描写叙述: 这段时间机器总是出现一个奇怪的问题:cidaemon.exe进程占用CUP率98%以上,大大影响了电脑的正常使用.资源管理器中出现多个cidaemon.exe进程,强制结束占用cpu率 ...

  6. Matlab与.NET基于类型安全的接口混合编程入门

    原文:[原创]Matlab与.NET基于类型安全的接口混合编程入门 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ...

  7. In Oracle 11g, how to change the order of the results of a sql without “order by”?(转)

    oracle 11g 当sql语句中不加order by的时候,好像是按rowid的顺序返回结果的.我也看过一些相关的文档,oracle的官方意思就是不加order by,就不保证输出的顺序. 那么, ...

  8. 【智能家居篇】wifi网络访问原理(下一个)——联想Association

    转载请注明出处:http://blog.csdn.net/Righthek 谢谢! 认证完毕后,下一步就是关联(Association). 工作站与基站进行关联.以便获得网络的全然訪问权. 关联属于一 ...

  9. Android而一个超级漂亮的日历控件

    ※效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGluZ2xvbmd4aW4yNA==/font/5a6L5L2T/fontsize/400/fil ...

  10. EpPlus读取生成Excel帮助类+读取csv帮助类+Aspose.Cells生成Excel帮助类

    大部分功能逻辑都在,少量自定义异常类和扩展方法 ,可用类似代码自己替换 //EpPlus读取生成Excel帮助类+读取csv帮助类,epplus只支持开放的Excel文件格式:xlsx,不支持 xls ...