環(huán)境:maven+SpringMVC + Spring + MyBatis + MySql
本文主要說明如何使用input上傳文件到服務器指定目錄,或保存到數(shù)據(jù)庫中;如何從數(shù)據(jù)庫下載文件,和顯示圖像文件并實現(xiàn)縮放。
將文件存儲在數(shù)據(jù)庫中,一般是存文件的byte數(shù)組,對應的數(shù)據(jù)庫數(shù)據(jù)類型為blob。
首先要創(chuàng)建數(shù)據(jù)庫,此處使用MySql數(shù)據(jù)庫。
注意:文中給出的代碼多為節(jié)選重要片段,并不齊全。
1. 前期準備
使用maven創(chuàng)建一個springMVC+spring+mybatis+mysql的項目。
關于如何整合Spring+mybatis+mysql,請見MyBatis簡介與配置MyBatis+Spring+MySql:
MyBatis學習 之 一、MyBatis簡介與配置MyBaits+Spring+MySql
關于SpringMVC環(huán)境的搭建請見:使用Eclipse構建Maven的SpringMVC項目:
使用Eclipse構建Maven的SpringMVC項目
在前臺html中,form的enctype為multipart/form-data。注意input、select的name要和StudentForm中成員一一對應。
上傳的url為addAction.do,此action方法的參數(shù)中使用StudentForm來映射提交的數(shù)據(jù)。此時就可以獲取到提交的文件的數(shù)據(jù)。然后我們就對文件進行操作。
創(chuàng)建PHOTO_TBL表:PHOTO_DATA字段用于存放文件,類型為MyBatis的longblob;然后寫Mapper的Java接口PhotoMapper:包括增刪改查;mapper的xml文件:對應JAVA接口的sql語句。
并且需要Spring配置文件添加一個bean的聲明。
下面給出html、action、StudentForm的代碼片段;創(chuàng)建PHOTO_TBL表的sql、PhotoMapper.java接口代碼、PhotoMapper.xml文件代碼。
1.1 html的form表單寫法
1.<form action="<c:url value='addAction.do' />" method="post" enctype="multipart/form-data"> 2. <table> 3. <tr> 4. <td width="100" align="right">照片:</td> 5. <td><input type="file" name="studentPhoto"/></td> 6. </tr> 7. </table> 8. <input type="submit"> 9.</form>
1.2 action方法
1./** 2. * 新增 - 提交 3. */ 4.@RequestMapping(value = "addAction.do") 5.public String add_action(ModelMap model, StudentForm form) { 6. 7.} 1.3 StudentForm類
1.package liming.student.manager.web.model; 2. 3.import org.springframework.web.multipart.MultipartFile; 4. 5.public class StudentForm extends GeneralForm { 6. 7. private String studentName; 8. private int studentSex; 9. private String studentBirthday; 10. private MultipartFile studentPhoto; 11. 12.} 1.4 創(chuàng)建PHOTO_TBL
1.CREATE TABLE PHOTO_TBL 2.( 3. PHOTO_ID VARCHAR(100) PRIMARY KEY, 4. PHOTO_DATA LONGBLOB, 5. FILE_NAME VARCHAR(10) 6.);
1.5 PhotoMapper接口
1.@Repository 2.@Transactional 3.public interface PhotoMapper { 4. 5. public void createPhoto(PhotoEntity entity); 6. 7. public int deletePhotoByPhotoId(String photoId); 8. 9. public int updatePhotoDate(@Param("photoId") String photoId, @Param("photoDate") byte[] photoDate); 10. 11. public PhotoEntity getPhotoEntityByPhotoId(String photoId); 12. 13.} 1.6 PhotoMapper.xml文件
包括增、刪、改、查。其中新增中的photoId使用的是mysql自定義函數(shù)自動生成主鍵。在操作blob時需要制定typeHandler為"org.apache.ibatis.type.BlobTypeHandler。insert、update時參數(shù)后面需要指定,resultMap中需要指定。
1.<?xml version="1.0" encoding="UTF-8" ?> 2.<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3.<mapper namespace="liming.student.manager.data.PhotoMapper"> 4. <resultMap type="liming.student.manager.data.model.PhotoEntity" id="photoMapper_resultMap_photoEntity"> 5. <id property="photoId" column="PHOTO_ID" javaType="String" jdbcType="VARCHAR" /> 6. <result property="photoData" column="PHOTO_DATA" javaType="byte[]" jdbcType="BLOB" typeHandler="org.apache.ibatis.type.BlobTypeHandler" /> 7. <result property="fileName" column="FILE_NAME" javaType="String" jdbcType="VARCHAR" /> 8. </resultMap> 9. 10. <insert id="createPhoto" parameterType="liming.student.manager.data.model.PhotoEntity"> 11. <selectKey keyProperty="photoId" resultType="String" order="BEFORE"> 12. select nextval('photo') 13. </selectKey> 14. INSERT INTO PHOTO_TBL(PHOTO_ID, 15. PHOTO_DATA, 16. FILE_NAME) 17. VALUES(#{photoId, jdbcType=VARCHAR}, 18. #{photoData, javaType=byte[], jdbcType=BLOB, typeHandler=org.apache.ibatis.type.BlobTypeHandler}, 19. #{fileName, jdbcType=VARCHAR}) 20. </insert> 21. 22. <delete id="deletePhotoByPhotoId"> 23. DELETE FROM PHOTO_TBL 24. WHERE PHOTO_ID = #{photoId, jdbcType=VARCHAR} 25. </delete> 26. 27. <update id="updatephotoData" > 28. UPDATE PHOTO_TBL 29. SET PHOTO_DATA = #{photoData, javaType=byte[], jdbcType=BLOB, typeHandler=org.apache.ibatis.type.BlobTypeHandler}, 30. FILE_NAME = #{fileName, jdbcType=VARCHAR} 31. WHERE PHOTO_ID = #{photoId, jdbcType=VARCHAR} 32. </update> 33. 34. <select id="getPhotoEntityByPhotoId" resultMap="photoMapper_resultMap_photoEntity"> 35. SELECT PHOTO_ID, 36. PHOTO_DATA, 37. FILE_NAME 38. FROM PHOTO_TBL 39. WHERE PHOTO_ID = #{photoId, jdbcType=VARCHAR} 40. </select> 41.</mapper> 1.7 spring配置文件
需要Spring配置文件添加一個org.springframework.web.multipart.commons.CommonsMultipartResolver的bean的聲明。
1.<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 2. <property name="maxUploadSize" value="1073741824" /> 3.</bean>
2. 將文件到服務器上
1.private static final String uploadFilePath = "d://temp_upload_file//"; 2. 3./** 4. * 新增 - 提交 主站蜘蛛池模板: 靖州| 商城县| 郸城县| 鲁山县| 尉犁县| 邹平县| 开鲁县| 三都| 丹江口市| 炎陵县| 从江县| 长顺县| 吉隆县| 报价| 余干县| 枣庄市| 安达市| 三都| 安乡县| 沙湾县| 临武县| 邯郸市| 竹山县| 双柏县| 永济市| 册亨县| 岳普湖县| 宜城市| 莱西市| 牙克石市| 犍为县| 珠海市| 洛隆县| 民勤县| 张家界市| 永春县| 西安市| 武功县| 华池县| 扶绥县| 乐山市|