作为一个初出茅庐的菜鸟,这几天做了一下附件的上传与下载,附件文件存储在mysql中,数据类型为blob。在此做一下总结。望指正。

  一.先总结附件的上传。(实质是将文件传到controller,后处理成二进制数据 才能够保存到数据库blob数据中)

      我的目的是将文件保存在mysql的某一条记录中,需要通过页面上传文件到后台。

      1.通过页面进行文件的上传,使用ajax,通过form表单以formData来将文件上传,删除不必要的内容。

        前台代码:<form id="file"  method="post" action="{{url}}" enctype="multipart/form-data">

               <div class="file-container">

                  <button  type="button" onclick="">上传</button>

                  <input type="file" name="file" id="file1" onchange="loadFile(this.files[0])" style="position: absolute; top: 0; left: 0; opacity: 0">

               </div>

               <button class="btn btn-primary" id="excelImp" type="button">导入</button>

              </form>            

    $('#excelImp').click(function(){
      var formData = new FormData();

      /*var formData = new FormData($("#file")[0]);*/  序列化表单的一种做法,可以上传文件。  
      var file = $('#file1').get(0).files[0];
      formData.append("id",rows[0].taskId)
      formData.append("file",file)
      $.ajax({
          url : " ",
          type : "POST",
          data :formData,
          async : false,
          cache : false,
          contentType : false,//必须false才会自动加上正确的Content-Type
          processData : false,//必须false才会避开jQuery对 formdata 的默认处理.XMLHttpRequest会对 formdata 进行正确的处理.
          success : function() {

          },
          error : function() {

          }
        })
      })

      解释一下,定义新的formData数据后,可以以键值对的形式,将想要传到后台的数据命名填入。

      要想将表单数据和文件一起传入到后台接收,只需在form标签中的与数据相关的标签name属性一一对应,就可以传输!

        后台代码:controller接受  参数与ajax的formData 的 key进行对应,例如@RequestParam(value = "file")MultipartFile file, @RequestParam(value = "id") String id

             这样控制器就可以接收到文件和一个id。

       控制器获取到文件和id后,我出现了一个问题:我项目使用的springboot和springcloud,在不同模块的调度过程中,使用了restTemplate将参数由前端模块的控制器

      传到另一个模块的控制器,怎么尝试都无法直接将MultipartFile的文件传输,所以对其进行了处理,将file转成了字节数组,才进行了传递。(对于我来说,为了更保险,                   我将字节数组转成了String 才进行的传输)。

          String afile = null;  InputStream ins = file.getInputStream();  byte[] buffer=new byte[1024];

          int len=0;  ByteArrayOutputStream bos=new ByteArrayOutputStream();          

            while((len=ins.read(buffer))!=-1){
              bos.write(buffer,0,len);
              }      bos.flush();  byte data[] = bos.toByteArray();  afile= new String (data);

      在实现类中接收到String 后,将其转成byte[]  通过jdbc对mysql的操作,将其插入到数据库中。

      Connection con = null;  Statement statement = null;  Statement statement = null;  

      Class.forName(driver);  con = DriverManager.getConnection(url,user,password);  

      String sql= "update XXX set XXX=?,XXX=?"+" where TASK_ID=?";

      PreparedStatement pstmt = con.prepareStatement(sql);

      pstmt.setBytes(1, data);  data为file转换成的byte[]数组,可直接存入到blob类型的数据

      pstmt.setString(2, taskReceiveAccessoryName);

      pstmt.setString(3, id);    pstmt.executeUpdate();    最后关闭数据库的连接

            

附件上传——mysql blob类型的数据(springboot)1的更多相关文章

  1. 使用plupload做一个类似qq邮箱附件上传的效果

    公司项目中使用的框架是springmvc+hibernate+spring,目前需要做一个类似qq邮箱附件上传的功能,暂时只是上传小类型的附件 处理过程和解决方案都需要添加附件,处理过程和解决方案都可 ...

  2. EBS开发附件上传和下载功能(转)

    原文地址: EBS开发附件上传和下载功能 上传 Oracle ERP二次开发中使用的方式有两种,一是通过标准功能,在系统管理员中定义即可,不用写代码,就可以使几乎任何Form具有附件功能,具体参考系统 ...

  3. asp.net结合uploadify实现多附件上传

    1.说明 uploadify是一款优秀jQuery插件,主要功能是批量上传文件.大多数同学对多附件上传感到棘手,现将asp.net结合uploadfiy如何实现批量上传附件给大家讲解一下,有什么不对的 ...

  4. 使用PreparedStatement向数据表中插入、修改、删除、获取Blob类型的数据

    使用PreparedStatement向数据表中插入.修改.删除.获取Blob类型的数据 2014-09-07 20:17 Blob介绍 BLOB类型的字段用于存储二进制数据 MySQL中,BLOB是 ...

  5. java 附件上传、下载前后端代码

    前言:业务需要:附件上传,需要同时满足浏览器上传,和APP上传附件,并且浏览器端不可使用form表单提交,因为表单提交无法直接获取返回值,除非刷新页面才可显示上传的附件.所以此处使用ajaxfileu ...

  6. 彻底解决DZ大附件上传问题

    个. 注意:很多人遇到修改php.ini后重应WEB服务后仍然不能生效.这种情况应该先确认一下所改的php.ini是不是当前PHP所使用的.您可以在WEB目录下建立一个php文件,内容很简单就一句话& ...

  7. Ajax实现附件上传

    前两篇文章有介绍使用form.submit 实现附件的上传,但是这种方式使用起来很不方便,如过需要再上传成功以后执行一些其他的操作的时候比较麻烦.下面我为大家介绍下使用ajax实现附件上传的功能: 1 ...

  8. fsLayuiPlugin附件上传使用说明

    fsLayuiPlugin 是一个基于layui的快速开发插件,支持数据表格增删改查操作,提供通用的组件,通过配置html实现数据请求,减少前端js重复开发的工作. GitHub下载 码云下载 测试环 ...

  9. httpclient 多附件上传

    多附件上传实例: /** * 多附件上传 * @param host * @param uri * @param attachment 附件 * @param param body参数 * @retu ...

随机推荐

  1. VC中BSTR、Char*、CString和CComBSTR类型的转换

    原文:http://blog.csdn.net/wanghaihao_1/article/details/37498689 1.char*转换成CString 若将char*转换成CString,除了 ...

  2. idea智能提示 不管用 问题

    今天碰到个问题,idea的智能提示 死活不能使用了.同一个包下的类竟然还没有智能提示,无语了... 搜了好多篇文章,虽然知道 重装可以解决...  这样设置就可以了:

  3. 如何有效防止API的重放攻击(转自阿里云)

    API重放攻击(Replay Attacks)又称重播攻击.回放攻击,这种攻击会不断恶意或欺诈性地重复一个有效的API请求.攻击者利用网络监听或者其他方式盗取API请求,进行一定的处理后,再把它重新发 ...

  4. Linux 虚拟机中配置 GNOME + VNC

    需求描述 在特定的需求下,需要用到 Linux 的图形化界面,但是 Azure 平台提供的虚拟机默认没有开放远程图形化登陆的功能.以下解决方案,提供了市面上非常流行的 GNOME + VNC 的组合来 ...

  5. jquery事件绑定函数

    1.bind 使用语法: jQueryObject.bind( events [, data ], handler ) jQueryObject.bind( events [, data ] [, i ...

  6. ASP.NET常用内置对象之——Server

    简介 Server对象是HttpServerUtility的一个实例,也是上下文对象context的一个属性,提供用于处理Web请求的Helper方法. 常用成员 一.Server.MapPath() ...

  7. Oracle实例初始化参数详解

    BACKGROUND_DUMP_DEST 显示和设置Oracle数据库相关日志的存放地,Oracle11g后不再可配置,但其值仍可显示相关日志的存放地,对应配置参数为diagnostic_dest U ...

  8. python filter&sorted

    filter filter()接收一个函数和一个序列和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素在一个list中, ...

  9. css3 box-shadow属性 鼠标移动添加阴影效果

    text-shadow是给文本添加阴影效果,box-shadow是给元素块添加周边阴影效果. 基本语法:{box-shadow:[inset] x-offset  y-offset  blur-rad ...

  10. February 21 2017 Week 8 Tuesday

    To make each day count. 让每一天都物有所值. We always want to make our life meaningful, however, the acutal f ...