当前位置:Gxlcms > 数据库问题 > springMVC+spring+hibernate注解上传文件到数据库,下载,多文件上传

springMVC+spring+hibernate注解上传文件到数据库,下载,多文件上传

时间:2021-07-01 10:21:17 帮助过:8人阅读

20) NOT NULL AUTO_INCREMENT, `realName` varchar(36) DEFAULT NULL, `fileContent` mediumblob, `handId` bigint(20) DEFAULT NULL, `customerId` bigint(20) DEFAULT NULL, PRIMARY KEY (`id`), KEY `fk_id` (`handId`), CONSTRAINT `fk_id` FOREIGN KEY (`handId`) REFERENCES `handprocess` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `handprocess` ( `id` bigint(20) NOT NULL DEFAULT 0, `handTime` bigint(20) DEFAULT NULL, `handName` varchar(20) DEFAULT NULL, `reason` varchar(100) DEFAULT NULL, `annexStr` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8

处理过程(handprocess)和附件表(annex)一对多关系,一条处理过程可以有多个附件

除了springmvc+hibernate+spring的jar,还需要

commons-fileupload-1.3.1.jar

commons-io-2.0.1.jar

数据库保存上传文件内容使用mediumblob类型

mysql保存数据库二进制文件使用blob类型,其大小如下

  1. TinyBlob 最大 <span style="color: #800080;">255</span><span style="color: #000000;">
  2. Blob 最大 65K
  3. MediumBlob 最大 16M
  4. LongBlob 最大 4G</span>

springmvc中需添加配置文件

  1. <bean id=<span style="color: #800000;">"</span><span style="color: #800000;">multipartResolver</span><span style="color: #800000;">"</span>
  2. <span style="color: #0000ff;">class</span>=<span style="color: #800000;">"</span><span style="color: #800000;">org.springframework.web.multipart.commons.CommonsMultipartResolver</span><span style="color: #800000;">"</span>>
  3. <property name=<span style="color: #800000;">"</span><span style="color: #800000;">maxUploadSize</span><span style="color: #800000;">"</span> value=<span style="color: #800000;">"</span><span style="color: #800000;">10000000</span><span style="color: #800000;">"</span>></property> <!-- <span style="color: #0000ff;">byte</span> -->
  4. <property name=<span style="color: #800000;">"</span><span style="color: #800000;">defaultEncoding</span><span style="color: #800000;">"</span> value=<span style="color: #800000;">"</span><span style="color: #800000;">utf-8</span><span style="color: #800000;">"</span> />
  5. </bean>

其中maxUploadSizes的大小是上传文件大小,单位:字节

实体:

  1. <span style="color: #000000;">package com.h3c.zgc.upload;
  2. import javax.persistence.Column;
  3. import javax.persistence.Entity;
  4. import javax.persistence.Id;
  5. import javax.persistence.Table;
  6. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  7. * 附件 和处理过程多对一
  8. * @author GoodLuck
  9. *
  10. </span><span style="color: #008000;">*/</span><span style="color: #000000;">
  11. @Entity
  12. @Table(name</span>=<span style="color: #800000;">"</span><span style="color: #800000;">annex</span><span style="color: #800000;">"</span>,catalog=<span style="color: #800000;">"</span><span style="color: #800000;">itac</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  13. </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> Annex {
  14. @Id
  15. @Column(name</span>=<span style="color: #800000;">"</span><span style="color: #800000;">id</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  16. </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> Long id;
  17. </span><span style="color: #008000;">//</span><span style="color: #008000;">上传文件的名称</span>
  18. @Column(name=<span style="color: #800000;">"</span><span style="color: #800000;">realName</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  19. </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String realName;
  20. </span><span style="color: #008000;">//</span><span style="color: #008000;">上传文件的内容</span>
  21. @Column(name=<span style="color: #800000;">"</span><span style="color: #800000;">fileContent</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  22. </span><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">byte</span><span style="color: #000000;">[] fileContent;
  23. </span><span style="color: #008000;">//</span><span style="color: #008000;">处理过程的id</span>
  24. @Column(name=<span style="color: #800000;">"</span><span style="color: #800000;">handId</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  25. </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> Long handId;
  26. </span><span style="color: #008000;">//</span><span style="color: #008000;">客户id</span>
  27. @Column(name=<span style="color: #800000;">"</span><span style="color: #800000;">customerId</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  28. </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> Long customerId;
  29. </span><span style="color: #008000;">//</span><span style="color: #008000;">getter and setter ...</span>
  30. <span style="color: #000000;">
  31. }</span>
  1. <span style="color: #000000;">package com.h3c.zgc.upload;
  2. import javax.persistence.Column;
  3. import javax.persistence.Entity;
  4. import javax.persistence.Id;
  5. import javax.persistence.Table;
  6. import javax.persistence.Transient;
  7. @Entity
  8. @Table(name</span>=<span style="color: #800000;">"</span><span style="color: #800000;">handprocess</span><span style="color: #800000;">"</span>,catalog=<span style="color: #800000;">"</span><span style="color: #800000;">itac</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  9. </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> HandProcess {
  10. @Id
  11. @Column(name</span>=<span style="color: #800000;">"</span><span style="color: #800000;">id</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  12. </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> Long id;
  13. @Column(name</span>=<span style="color: #800000;">"</span><span style="color: #800000;">handTime</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  14. </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> Long handTime;
  15. @Column(name</span>=<span style="color: #800000;">"</span><span style="color: #800000;">handName</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  16. </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String handName;
  17. @Column(name</span>=<span style="color: #800000;">"</span><span style="color: #800000;">reason</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  18. </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String reason;
  19. @Column(name</span>=<span style="color: #800000;">"</span><span style="color: #800000;">annexStr</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  20. </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String annexStr;
  21. @Transient
  22. </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> String handTimeStr;
  23. </span><span style="color: #008000;">//</span><span style="color: #008000;">getter and setter ...</span>
  24. <span style="color: #000000;">
  25. }</span>

dao层

  1. <span style="color: #000000;">package com.h3c.zgc.upload;
  2. import java.io.Serializable;
  3. import java.util.List;
  4. import javax.annotation.Resource;
  5. import org.hibernate.SQLQuery;
  6. import org.hibernate.Session;
  7. import org.hibernate.SessionFactory;
  8. import org.hibernate.transform.Transformers;
  9. import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
  10. import org.springframework.stereotype.Repository;
  11. @Repository
  12. </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> UploadDownDao extends HibernateDaoSupport{
  13. @Resource
  14. </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> <span style="color: #0000ff;">set</span><span style="color: #000000;">(SessionFactory sessionFactory){
  15. </span><span style="color: #0000ff;">this</span><span style="color: #000000;">.setSessionFactory(sessionFactory);
  16. }
  17. </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Session getSession(){
  18. </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">this</span><span style="color: #000000;">.getSessionFactory().openSession();
  19. }
  20. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  21. * 获取附件id最大值
  22. </span><span style="color: #008000;">*/</span>
  23. <span style="color: #0000ff;">public</span><span style="color: #000000;"> Long getMaxIdOfAnnex(){
  24. List l </span>= <span style="color: #0000ff;">this</span>.getHibernateTemplate().find(<span style="color: #800000;">"</span><span style="color: #800000;">select max(id) from Annex</span><span style="color: #800000;">"</span><span style="color: #000000;">);
  25. System.</span><span style="color: #0000ff;">out</span><span style="color: #000000;">.println(l);
  26. </span><span style="color: #0000ff;">if</span>(l!=<span style="color: #0000ff;">null</span>&&l.size()==<span style="color: #800080;">1</span>&&l.<span style="color: #0000ff;">get</span>(<span style="color: #800080;">0</span>)!=<span style="color: #0000ff;">null</span><span style="color: #000000;">){
  27. </span><span style="color: #0000ff;">return</span> (Long) l.<span style="color: #0000ff;">get</span>(<span style="color: #800080;">0</span><span style="color: #000000;">);
  28. }
  29. </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">0L</span><span style="color: #000000;">;
  30. }
  31. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  32. * 获取处理过程id最大值
  33. * @return
  34. </span><span style="color: #008000;">*/</span>
  35. <span style="color: #0000ff;">public</span><span style="color: #000000;"> Long getMaxIdOfHandProcess(){
  36. List l </span>= <span style="color: #0000ff;">this</span>.getHibernateTemplate().find(<span style="color: #800000;">"</span><span style="color: #800000;">select max(id) from HandProcess</span><span style="color: #800000;">"</span><span style="color: #000000;">);
  37. System.</span><span style="color: #0000ff;">out</span><span style="color: #000000;">.println(l);
  38. </span><span style="color: #0000ff;">if</span>(l!=<span style="color: #0000ff;">null</span>&&l.size()==<span style="color: #800080;">1</span>&&l.<span style="color: #0000ff;">get</span>(<span style="color: #800080;">0</span>)!=<span style="color: #0000ff;">null</span><span style="color: #000000;">){
  39. </span><span style="color: #0000ff;">return</span> (Long) l.<span style="color: #0000ff;">get</span>(<span style="color: #800080;">0</span><span style="color: #000000;">);
  40. }
  41. </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">0L</span><span style="color: #000000;">;
  42. }
  43. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  44. * 保存附件
  45. * @param annex
  46. * @return
  47. </span><span style="color: #008000;">*/</span>
  48. <span style="color: #0000ff;">public</span><span style="color: #000000;"> Serializable saveAnnex(Annex annex){
  49. </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">this</span><span style="color: #000000;">.getHibernateTemplate().save(annex);
  50. }
  51. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  52. * 保存处理过程
  53. * @param hp
  54. * @return
  55. </span><span style="color: #008000;">*/</span>
  56. <span style="color: #0000ff;">public</span><span style="color: #000000;"> Serializable saveHandProcess(HandProcess hp){
  57. </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">this</span><span style="color: #000000;">.getHibernateTemplate().save(hp);
  58. }
  59. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  60. * 获取处理过程列表,左连接查询
  61. * @return
  62. </span><span style="color: #008000;">*/</span>
  63. <span style="color: #0000ff;">public</span> List getHandProcessList(){<span style="color: #008000;">//</span><span style="color: #008000;">有没有可能没有附件,附件annex,处理过程handprocess</span>
  64. SQLQuery query = <span style="color: #0000ff;">this</span>.getSession().createSQLQuery(<span style="color: #800000;">"</span><span style="color: #800000;">select h.id handprocessId,h.annexStr annexStr,a.id annexId,a.realName realName,h.handTime handTime,h.handName handName,h.reason reason from handprocess h left join annex a on a.handId=h.id</span><span style="color: #800000;">"</span><span style="color: #000000;">);
  65. query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
  66. List list </span>=<span style="color: #000000;"> query.list();
  67. </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> list;
  68. }
  69. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  70. * 根据id获取附件信息
  71. * @param annexId
  72. * @return
  73. </span><span style="color: #008000;">*/</span>
  74. <span style="color: #0000ff;">public</span><span style="color: #000000;"> Annex getAnnexById(Long annexId){
  75. </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">this</span>.getHibernateTemplate().<span style="color: #0000ff;">get</span>(Annex.<span style="color: #0000ff;">class</span><span style="color: #000000;">, annexId);
  76. }
  77. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  78. * 修改处理过程
  79. * @param hp
  80. </span><span style="color: #008000;">*/</span>
  81. <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> updateHandProcess(HandProcess hp){
  82. </span><span style="color: #0000ff;">this</span><span style="color: #000000;">.getHibernateTemplate().update(hp);
  83. }
  84. }</span>

service层

  1. <span style="color: #000000;">package com.h3c.zgc.upload;
  2. import java.io.Serializable;
  3. import java.util.List;
  4. import java.util.Map;
  5. import javax.annotation.Resource;
  6. import javax.transaction.Transactional;
  7. import org.springframework.stereotype.Service;
  8. @Service
  9. </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> UploadDownService {
  10. @Resource
  11. </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> UploadDownDao uploadDownDao;
  12. </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Long getMaxIdOfAnnex(){
  13. </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownDao.getMaxIdOfAnnex();
  14. }
  15. </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Long getMaxIdOfHandProcess(){
  16. </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownDao.getMaxIdOfHandProcess();
  17. }
  18. @Transactional
  19. </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Serializable saveAnnex(Annex annex){
  20. </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownDao.saveAnnex(annex);
  21. }
  22. @Transactional
  23. </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Serializable saveHandProcess(HandProcess hp){
  24. </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownDao.saveHandProcess(hp);
  25. }
  26. </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> Annex getAnnexById(Long annexId){
  27. </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownDao.getAnnexById(annexId);
  28. }
  29. </span><span style="color: #0000ff;">public</span> List<Map<String,Object>><span style="color: #000000;"> getHandProcessList(){
  30. </span><span style="color: #0000ff;">return</span> <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownDao.getHandProcessList();
  31. }
  32. @Transactional
  33. </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> updateHandProcess(HandProcess hp){
  34. </span><span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownDao.updateHandProcess(hp);
  35. }
  36. }</span>

controller层

  1. <span style="color: #000000;">package com.h3c.zgc.upload;
  2. import java.io.BufferedOutputStream;
  3. import java.io.ByteArrayOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.io.Serializable;
  7. import java.text.DateFormat;
  8. import java.text.ParseException;
  9. import java.text.SimpleDateFormat;
  10. import java.util.List;
  11. import java.util.Map;
  12. import javax.annotation.Resource;
  13. import javax.servlet.http.HttpServletRequest;
  14. import javax.servlet.http.HttpServletResponse;
  15. import org.springframework.stereotype.Controller;
  16. import org.springframework.web.bind.annotation.RequestMapping;
  17. import org.springframework.web.bind.annotation.RequestParam;
  18. import org.springframework.web.multipart.MultipartFile;
  19. @Controller
  20. </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> UploadDownFileController {
  21. @Resource
  22. </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> UploadDownService uploadDownService;
  23. </span><span style="color: #008000;">//</span><span style="color: #008000;">单文件上传到数据库,MultipartFile中封装了上传文件的信息</span>
  24. @RequestMapping(<span style="color: #800000;">"</span><span style="color: #800000;">upload</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  25. </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String upload(HandProcess hp, HttpServletRequest request,
  26. @RequestParam(</span><span style="color: #800000;">"</span><span style="color: #800000;">uploadFile1</span><span style="color: #800000;">"</span><span style="color: #000000;">) MultipartFile uploadFile1)
  27. throws IOException, ParseException {
  28. InputStream </span><span style="color: #0000ff;">is</span> =<span style="color: #000000;"> uploadFile1.getInputStream();
  29. </span><span style="color: #0000ff;">byte</span>[] buffer = <span style="color: #0000ff;">this</span>.inputStrean2ByteArr(<span style="color: #0000ff;">is</span><span style="color: #000000;">);
  30. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  31. * 保存处理过程信息
  32. </span><span style="color: #008000;">*/</span>
  33. <span style="color: #008000;">//</span><span style="color: #008000;"> get max id then ++1</span>
  34. Long hpMaxId = <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownService.getMaxIdOfHandProcess();
  35. DateFormat df </span>= <span style="color: #0000ff;">new</span> SimpleDateFormat(<span style="color: #800000;">"</span><span style="color: #800000;">yyyy-MM-dd hh:mm:ss</span><span style="color: #800000;">"</span><span style="color: #000000;">);
  36. hp.setHandTime(df.parse(hp.getHandTimeStr()).getTime());
  37. hp.setId(hpMaxId </span>+ <span style="color: #800080;">1</span><span style="color: #000000;">);
  38. </span><span style="color: #008000;">//</span><span style="color: #008000;">保存处理过程</span>
  39. Serializable hpId = <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownService.saveHandProcess(hp);
  40. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  41. * 保存附件
  42. </span><span style="color: #008000;">*/</span><span style="color: #000000;">
  43. Annex annex </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> Annex();
  44. annex.setCustomerId(</span><span style="color: #800080;">1L</span><span style="color: #000000;">);
  45. annex.setHandId((Long) hpId);
  46. annex.setRealName(uploadFile1.getOriginalFilename());
  47. annex.setFileContent(buffer);
  48. </span><span style="color: #008000;">//</span><span style="color: #008000;">查找附件id最大值</span>
  49. annex.setId(<span style="color: #0000ff;">this</span>.uploadDownService.getMaxIdOfAnnex() + <span style="color: #800080;">1</span><span style="color: #000000;">);
  50. Serializable aid </span>= <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownService.saveAnnex(annex);
  51. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  52. * 获取处理过程列表
  53. </span><span style="color: #008000;">*/</span><span style="color: #000000;">
  54. List</span><Map<String, Object>> <span style="color: #0000ff;">as</span> = <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownService
  55. .getHandProcessList();
  56. </span><span style="color: #0000ff;">for</span> (Map<String, Object> map : <span style="color: #0000ff;">as</span><span style="color: #000000;">) {
  57. map.put(</span><span style="color: #800000;">"</span><span style="color: #800000;">handTime</span><span style="color: #800000;">"</span>, df.format(map.<span style="color: #0000ff;">get</span>(<span style="color: #800000;">"</span><span style="color: #800000;">handTime</span><span style="color: #800000;">"</span><span style="color: #000000;">)));
  58. }
  59. request.setAttribute(</span><span style="color: #800000;">"</span><span style="color: #800000;">as</span><span style="color: #800000;">"</span>, <span style="color: #0000ff;">as</span><span style="color: #000000;">);
  60. </span><span style="color: #0000ff;">return</span> <span style="color: #800000;">"</span><span style="color: #800000;">annex/annexList</span><span style="color: #800000;">"</span><span style="color: #000000;">;
  61. }
  62. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  63. * 多文件上传
  64. * @param hp 处理过程
  65. * @param request
  66. * @param uploadFile1 上传文件
  67. * @return
  68. * @throws IOException
  69. * @throws ParseException
  70. </span><span style="color: #008000;">*/</span><span style="color: #000000;">
  71. @RequestMapping(</span><span style="color: #800000;">"</span><span style="color: #800000;">uploadOneMore</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  72. </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String uploadOneMore(HandProcess hp, HttpServletRequest request,
  73. @RequestParam(</span><span style="color: #800000;">"</span><span style="color: #800000;">uploadFile1</span><span style="color: #800000;">"</span><span style="color: #000000;">) MultipartFile[] uploadFile1)
  74. throws IOException, ParseException {
  75. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  76. * 保存处理过程信息
  77. </span><span style="color: #008000;">*/</span>
  78. <span style="color: #008000;">//</span><span style="color: #008000;"> get max id then ++1</span>
  79. Long hpMaxId = <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownService.getMaxIdOfHandProcess();
  80. DateFormat df </span>= <span style="color: #0000ff;">new</span> SimpleDateFormat(<span style="color: #800000;">"</span><span style="color: #800000;">yyyy-MM-dd hh:mm:ss</span><span style="color: #800000;">"</span><span style="color: #000000;">);
  81. hp.setHandTime(df.parse(hp.getHandTimeStr()).getTime());
  82. hp.setId(hpMaxId </span>+ <span style="color: #800080;">1</span><span style="color: #000000;">);
  83. </span><span style="color: #008000;">//
  84. </span> Serializable hpId = <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownService.saveHandProcess(hp);
  85. </span><span style="color: #008000;">//</span><span style="color: #008000;">保存改工单下的所有附件</span>
  86. <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> i = <span style="color: #800080;">0</span>; i < uploadFile1.length; i++<span style="color: #000000;">) {
  87. InputStream </span><span style="color: #0000ff;">is</span> =<span style="color: #000000;"> uploadFile1[i].getInputStream();
  88. </span><span style="color: #0000ff;">byte</span>[] buffer = <span style="color: #0000ff;">this</span>.inputStrean2ByteArr(<span style="color: #0000ff;">is</span><span style="color: #000000;">);
  89. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  90. * 保存附件
  91. </span><span style="color: #008000;">*/</span><span style="color: #000000;">
  92. Annex annex </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> Annex();
  93. annex.setCustomerId(</span><span style="color: #800080;">1L</span><span style="color: #000000;">);
  94. annex.setHandId((Long) hpId);
  95. annex.setRealName(uploadFile1[i].getOriginalFilename());
  96. annex.setFileContent(buffer);
  97. annex.setId(</span><span style="color: #0000ff;">this</span>.uploadDownService.getMaxIdOfAnnex() + <span style="color: #800080;">1</span><span style="color: #000000;">);
  98. Serializable annexId </span>= <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownService.saveAnnex(annex);
  99. }
  100. </span><span style="color: #008000;">//</span><span style="color: #008000;">多文件上传,一个处理过程下面要有多个附件,在页面中显示的时候,一个处理过程后面要显示多个附件
  101. </span><span style="color: #008000;">//</span><span style="color: #008000;">更新表handprocess</span>
  102. <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownService.updateHandProcess(hp);
  103. List</span><Map<String, Object>> <span style="color: #0000ff;">as</span> = <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownService
  104. .getHandProcessList();
  105. request.setAttribute(</span><span style="color: #800000;">"</span><span style="color: #800000;">as</span><span style="color: #800000;">"</span>, <span style="color: #0000ff;">as</span><span style="color: #000000;">);
  106. </span><span style="color: #0000ff;">return</span> <span style="color: #800000;">"</span><span style="color: #800000;">annex/annexList</span><span style="color: #800000;">"</span><span style="color: #000000;">;
  107. }
  108. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  109. * 文件下载
  110. * @param response
  111. * @param annexId
  112. * @throws IOException
  113. </span><span style="color: #008000;">*/</span><span style="color: #000000;">
  114. @RequestMapping(</span><span style="color: #800000;">"</span><span style="color: #800000;">download</span><span style="color: #800000;">"</span><span style="color: #000000;">)
  115. </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> download(HttpServletResponse response, Long annexId)
  116. throws IOException {
  117. Annex a </span>= <span style="color: #0000ff;">this</span><span style="color: #000000;">.uploadDownService.getAnnexById(annexId);
  118. </span><span style="color: #0000ff;">byte</span>[] b =<span style="color: #000000;"> a.getFileContent();
  119. response.setContentType(</span><span style="color: #800000;">"</span><span style="color: #800000;">application/octet-stream;charset=UTF-8</span><span style="color: #800000;">"</span><span style="color: #000000;">);
  120. response.setCharacterEncoding(</span><span style="color: #800000;">"</span><span style="color: #800000;">utf-8</span><span style="color: #800000;">"</span><span style="color: #000000;">);
  121. response.setHeader(</span><span style="color: #800000;">"</span><span style="color: #800000;">Content-Disposition</span><span style="color: #800000;">"</span><span style="color: #000000;">,
  122. </span><span style="color: #800000;">"</span><span style="color: #800000;">attachment;filename=</span><span style="color: #800000;">"</span> + <span style="color: #0000ff;">new</span> String(a.getRealName().getBytes(<span style="color: #800000;">"</span><span style="color: #800000;">gbk</span><span style="color: #800000;">"</span>),<span style="color: #800000;">"</span><span style="color: #800000;">iso-8859-1</span><span style="color: #800000;">"</span>)); <span style="color: #008000;">//</span><span style="color: #008000;">防止文件乱码</span>
  123. <span style="color: #000000;">
  124. BufferedOutputStream bos </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> BufferedOutputStream(
  125. response.getOutputStream());
  126. bos.write(b);
  127. bos.close();
  128. }
  129. </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
  130. * inputstream转成byte数组
  131. * @param inStream
  132. * @return
  133. * @throws IOException
  134. </span><span style="color: #008000;">*/</span>
  135. <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">byte</span><span style="color: #000000;">[] inputStrean2ByteArr(InputStream inStream) throws IOException {
  136. ByteArrayOutputStream swapStream </span>= <span style="color: #0000ff;">new</span><span style="color: #000000;"> ByteArrayOutputStream();
  137. </span><span style="color: #0000ff;">byte</span>[] buff = <span style="color: #0000ff;">new</span> <span style="color: #0000ff;">byte</span>[<span style="color: #800080;">100</span><span style="color: #000000;">];
  138. </span><span style="color: #0000ff;">int</span> rc = <span style="color: #800080;">0</span><span style="color: #000000;">;
  139. </span><span style="color: #0000ff;">while</span> ((rc = inStream.read(buff, <span style="color: #800080;">0</span>, <span style="color: #800080;">100</span>)) > <span style="color: #800080;">0</span><span style="color: #000000;">) {
  140. swapStream.write(buff, </span><span style="color: #800080;">0</span><span style="color: #000000;">, rc);
  141. }
  142. </span><span style="color: #0000ff;">byte</span>[] in2b =<span style="color: #000000;"> swapStream.toByteArray();
  143. </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> in2b;
  144. }
  145. }</span>

main.jsp

  1. <%@ page language=<span style="color: #800000;">"</span><span style="color: #800000;">java</span><span style="color: #800000;">"</span> contentType=<span style="color: #800000;">"</span><span style="color: #800000;">text/html; charset=UTF-8</span><span style="color: #800000;">"</span><span style="color: #000000;">
  2. pageEncoding</span>=<span style="color: #800000;">"</span><span style="color: #800000;">UTF-8</span><span style="color: #800000;">"</span>%>
  3. <%@taglib prefix=<span style="color: #800000;">"</span><span style="color: #800000;">c</span><span style="color: #800000;">"</span> uri=<span style="color: #800000;">"</span><span style="color: #800000;">http://java.sun.com/jsp/jstl/core</span><span style="color: #800000;">"</span>%>
  4. <!DOCTYPE html PUBLIC <span style="color: #800000;">"</span><span style="color: #800000;">-//W3C//DTD HTML 4.01 Transitional//EN</span><span style="color: #800000;">"</span> <span style="color: #800000;">"</span><span style="color: #800000;">http://www.w3.org/TR/html4/loose.dtd</span><span style="color: #800000;">"</span>>
  5. <html>
  6. <head>
  7. <meta http-equiv=<span style="color: #800000;">"</span><span style="color: #800000;">Content-Type</span><span style="color: #800000;">"</span> content=<span style="color: #800000;">"</span><span style="color: #800000;">text/html; charset=UTF-8</span><span style="color: #800000;">"</span>>
  8. <title>Insert title here</title>
  9. <script type=<span style="color: #800000;">"</span><span style="color: #800000;">text/javascript</span><span style="color: #800000;">"</span> src=<span style="color: #800000;">"</span><span style="color: #800000;">${pageContext.request.contextPath }/resources/js/jquery-1.11.1.js</span><span style="color: #800000;">"</span>></script>
  10. </head>
  11. <body>
  12. <a href=<span style="color: #800000;">"</span><span style="color: #800000;">${pageContext.request.contextPath }/getAllStudent</span><span style="color: #800000;">"</span>>查找所有用户</a>
  13. <a href=<span style="color: #800000;">"</span><span style="color: #800000;">${pageContext.request.contextPath }/savePerson</span><span style="color: #800000;">"</span>>单独保存Person</a>
  14. <a href=<span style="color: #800000;">"</span><span style="color: #800000;">${pageContext.request.contextPath }/savePersonHouse</span><span style="color: #800000;">"</span>>保存Person和House</a>
  15. <br/>
  16. <form action=<span style="color: #800000;">"</span><span style="color: #800000;">${pageContext.request.contextPath }/getArr</span><span style="color: #800000;">"</span> >
  17. <input type=<span style="color: #800000;">"</span><span style="color: #800000;">text</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">workSheetId</span><span style="color: #800000;">"</span>/><br/>
  18. <input type=<span style="color: #800000;">"</span><span style="color: #800000;">submit</span><span style="color: #800000;">"</span> value=<span style="color: #800000;">"</span><span style="color: #800000;">search</span><span style="color: #800000;">"</span>/>
  19. </form>
  20. <br/><br/><br/>
  21. <form action=<span style="color: #800000;">"</span><span style="color: #800000;"><c:url value=</span><span style="color: #800000;">"</span>/upload<span style="color: #800000;">"</span><span style="color: #800000;">/></span><span style="color: #800000;">"</span> method=<span style="color: #800000;">"</span><span style="color: #800000;">post</span><span style="color: #800000;">"</span> enctype=<span style="color: #800000;">"</span><span style="color: #800000;">multipart/form-data</span><span style="color: #800000;">"</span>><span style="color: #000000;">
  22. 处理时间:</span><input type=<span style="color: #800000;">"</span><span style="color: #800000;">text</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">handTimeStr</span><span style="color: #800000;">"</span>/><br><span style="color: #000000;">
  23. 处理人:</span><input type=<span style="color: #800000;">"</span><span style="color: #800000;">text</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">handName</span><span style="color: #800000;">"</span>/><br/><span style="color: #000000;">
  24. 原因:</span><input type=<span style="color: #800000;">"</span><span style="color: #800000;">text</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">reason</span><span style="color: #800000;">"</span>/><br/><span style="color: #000000;">
  25. 选择文件:</span><input type=<span style="color: #800000;">"</span><span style="color: #800000;">file</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">uploadFile1</span><span style="color: #800000;">"</span>/><br/>
  26. <input type=<span style="color: #800000;">"</span><span style="color: #800000;">submit</span><span style="color: #800000;">"</span> value=<span style="color: #800000;">"</span><span style="color: #800000;">submit</span><span style="color: #800000;">"</span>/>
  27. </form>
  28. <br/><span style="color: #000000;">
  29. upload one more
  30. </span><form action=<span style="color: #800000;">"</span><span style="color: #800000;"><c:url value=</span><span style="color: #800000;">"</span>/uploadOneMore<span style="color: #800000;">"</span><span style="color: #800000;">/></span><span style="color: #800000;">"</span> method=<span style="color: #800000;">"</span><span style="color: #800000;">post</span><span style="color: #800000;">"</span> enctype=<span style="color: #800000;">"</span><span style="color: #800000;">multipart/form-data</span><span style="color: #800000;">"</span>><span style="color: #000000;">
  31. 处理时间:</span><input type=<span style="color: #800000;">"</span><span style="color: #800000;">text</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">handTimeStr</span><span style="color: #800000;">"</span>/><br><span style="color: #000000;">
  32. 处理人:</span><input type=<span style="color: #800000;">"</span><span style="color: #800000;">text</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">handName</span><span style="color: #800000;">"</span>/><br/><span style="color: #000000;">
  33. 原因:</span><input type=<span style="color: #800000;">"</span><span style="color: #800000;">text</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">reason</span><span style="color: #800000;">"</span>/><br/><span style="color: #000000;">
  34. 选择文件:</span><input type=<span style="color: #800000;">"</span><span style="color: #800000;">file</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">uploadFile1</span><span style="color: #800000;">"</span>/><br/><span style="color: #000000;">
  35. 选择文件:</span><input type=<span style="color: #800000;">"</span><span style="color: #800000;">file</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">uploadFile1</span><span style="color: #800000;">"</span>/><br/><span style="color: #000000;">
  36. 选择文件:</span><input type=<span style="color: #800000;">"</span><span style="color: #800000;">file</span><span style="color: #800000;">"</span> name=<span style="color: #800000;">"</span><span style="color: #800000;">uploadFile1</span><span style="color: #800000;">"</span>/><br/>
  37. <input type=<span style="color: #800000;">"</span><span style="color: #800000;">submit</span><span style="color: #800000;">"</span> value=<span style="color: #800000;">"</span><span style="color: #800000;">submit</span><span style="color: #800000;">"</span>/>
  38. </form>
  39. </body>
  40. </html>

annexList.jsp  显示处理过程已经处理过程下附件

  1. <%@ page language=<span style="color: #800000;">"</span><span style="color: #800000;">java</span><span style="color: #800000;">"</span> contentType=<span style="color: #800000;">"</span><span style="color: #800000;">text/html; charset=UTF-8</span><span style="color: #800000;">"</span><span style="color: #000000;">
  2. pageEncoding</span>=<span style="color: #800000;">"</span><span style="color: #800000;">UTF-8</span><span style="color: #800000;">"</span>%>
  3. <%@taglib prefix=<span style="color: #800000;">"</span><span style="color: #800000;">c</span><span style="color: #800000;">"</span> uri=<span style="color: #800000;">"</span><span style="color: #800000;">http://java.sun.com/jsp/jstl/core</span><span style="color: #800000;">"</span>%>
  4. <!DOCTYPE html PUBLIC <span style="color: #800000;">"</span><span style="color: #800000;">-//W3C//DTD HTML 4.01 Transitional//EN</span><span style="color: #800000;">"</span> <span style="color: #800000;">"</span><span style="color: #800000;">http://www.w3.org/TR/html4/loose.dtd</span><span style="color: #800000;">"</span>>
  5. <html>
  6. <head>
  7. <meta http-equiv=<span style="color: #800000;">"</span><span style="color: #800000;">Content-Type</span><span style="color: #800000;">"</span> content=<span style="color: #800000;">"</span><span style="color: #800000;">text/html; charset=UTF-8</span><span style="color: #800000;">"</span>>
  8. <title>Insert title here</title>
  9. <script type=<span style="color: #800000;">"</span><span style="color: #800000;">text/javascript</span><span style="color: #800000;">"</span><span style="color: #000000;">
  10. src</span>=<span style="color: #800000;">"</span><span style="color: #800000;">${pageContext.request.contextPath }/resources/js/jquery-1.11.1.js</span><span style="color: #800000;">"</span>></script>
  11. </head>
  12. <body>
  13. <table>
  14. <c:forEach items=<span style="color: #800000;">"</span><span style="color: #800000;">${as }</span><span style="color: #800000;">"</span> <span style="color: #0000ff;">var</span>=<span style="color: #800000;">"</span><span style="color: #800000;">ah</span><span style="color: #800000;">"</span> varStatus=<span style="color: #800000;">"</span><span style="color: #800000;">status</span><span style="color: #800000;">"</span>>
  15. <tr>
  16. <td>${ah[<span style="color: #800000;">‘</span><span style="color: #800000;">handprocessId</span><span style="color: #800000;">‘</span>] }</td>
  17. <td>${ah[<span style="color: #800000;">‘</span><span style="color: #800000;">handName</span><span style="color: #800000;">‘</span>] }</td>
  18. <td>${ah[<span style="color: #800000;">‘</span><span style="color: #800000;">reason</span><span style="color: #800000;">‘</span>] }</td>
  19. <td id=<span style="color: #800000;">"</span><span style="color: #800000;">id${status.index }</span><span style="color: #800000;">"</span>>${ah[<span style="color: #800000;">‘</span><span style="color: #800000;">handTime</span><span style="color: #800000;">‘</span>] }</td>
  20. <td><span style="color: #000000;">
  21. ${ah[</span><span style="color: #800000;">‘</span><span style="color: #800000;">annex</span><span style="color: #800000;">‘</span>][<span style="color: #800000;">‘</span><span style="color: #800000;">realName</span><span style="color: #800000;">‘</span><span style="color: #000000;">] }
  22. </span><a href=<span style="color: #800000;">"</span><span style="color: #800000;"><c:url value=</span><span style="color: #800000;">"</span>/download?annexId=${ah[<span style="color: #800000;">‘</span><span style="color: #800000;">annexId</span><span style="color: #800000;">‘</span>] }<span style="color: #800000;">"</span><span style="color: #800000;">/></span><span style="color: #800000;">"</span>>${ah[<span style="color: #800000;">‘</span><span style="color: #800000;">realName</span><span style="color: #800000;">‘</span>] }</a>
  23. </td>
  24. </tr>
  25. </c:forEach>
  26. </table>
  27. </body>
  28. <script type=<span style="color: #800000;">"</span><span style="color: #800000;">text/javascript</span><span style="color: #800000;">"</span>>
  29. </script>
  30. </html>

 

springMVC+spring+hibernate注解上传文件到数据库,下载,多文件上传

标签:

人气教程排行