• 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"/>

    文件的保存做了两种方式,一种是直接存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在这么多的代码。












  • 相关阅读:
    webpack-merge 配置抽离
    从这个博客皮肤迈入前端性能优化一小步
    用 webpack 搭了一个写博客园皮肤的架子
    host 文件位置
    鼠标右键添加取得管理员所有权
    桌面快捷方式去掉小箭头
    win10恢复系统预装软件
    Zookeeper相关知识
    Docker安装常见的应用与将本地镜像推送到阿里云
    DockerFile解析
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4606125.html
Copyright © 2020-2023  润新知