附件上传——mysql blob类型的数据(springboot)1
作为一个初出茅庐的菜鸟,这几天做了一下附件的上传与下载,附件文件存储在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的更多相关文章
- 使用plupload做一个类似qq邮箱附件上传的效果
公司项目中使用的框架是springmvc+hibernate+spring,目前需要做一个类似qq邮箱附件上传的功能,暂时只是上传小类型的附件 处理过程和解决方案都需要添加附件,处理过程和解决方案都可 ...
- EBS开发附件上传和下载功能(转)
原文地址: EBS开发附件上传和下载功能 上传 Oracle ERP二次开发中使用的方式有两种,一是通过标准功能,在系统管理员中定义即可,不用写代码,就可以使几乎任何Form具有附件功能,具体参考系统 ...
- asp.net结合uploadify实现多附件上传
1.说明 uploadify是一款优秀jQuery插件,主要功能是批量上传文件.大多数同学对多附件上传感到棘手,现将asp.net结合uploadfiy如何实现批量上传附件给大家讲解一下,有什么不对的 ...
- 使用PreparedStatement向数据表中插入、修改、删除、获取Blob类型的数据
使用PreparedStatement向数据表中插入.修改.删除.获取Blob类型的数据 2014-09-07 20:17 Blob介绍 BLOB类型的字段用于存储二进制数据 MySQL中,BLOB是 ...
- java 附件上传、下载前后端代码
前言:业务需要:附件上传,需要同时满足浏览器上传,和APP上传附件,并且浏览器端不可使用form表单提交,因为表单提交无法直接获取返回值,除非刷新页面才可显示上传的附件.所以此处使用ajaxfileu ...
- 彻底解决DZ大附件上传问题
个. 注意:很多人遇到修改php.ini后重应WEB服务后仍然不能生效.这种情况应该先确认一下所改的php.ini是不是当前PHP所使用的.您可以在WEB目录下建立一个php文件,内容很简单就一句话& ...
- Ajax实现附件上传
前两篇文章有介绍使用form.submit 实现附件的上传,但是这种方式使用起来很不方便,如过需要再上传成功以后执行一些其他的操作的时候比较麻烦.下面我为大家介绍下使用ajax实现附件上传的功能: 1 ...
- fsLayuiPlugin附件上传使用说明
fsLayuiPlugin 是一个基于layui的快速开发插件,支持数据表格增删改查操作,提供通用的组件,通过配置html实现数据请求,减少前端js重复开发的工作. GitHub下载 码云下载 测试环 ...
- httpclient 多附件上传
多附件上传实例: /** * 多附件上传 * @param host * @param uri * @param attachment 附件 * @param param body参数 * @retu ...
随机推荐
- 【阿里云产品公测】在ACE上部署WP测试体验
ACE服务其实已经有很多类似的服务提供商了,无论收费的还是免费的, 但是到现在为止还没有体验过,正好借着这次机会,来体验一下阿里云的ACE服务. ' !2NSv /IQ$[WR cx B ...
- C# 中重载自增自减操作符的具体运算原理 ----从C++程序员的角度看C#自增操作符重载的实质
看了看C#的运算符重载,发现与C++打不相同.刚刚被C#的自增操作符坑了,现在来分享一下. 先定义一个类 class A { public int i; public A(int I) { i = I ...
- Oracle从入门到精通 限定查询和排序查询的问题
视频课程:李兴华 Oracle从入门到精通视频课程 学习者:阳光罗诺 视频来源:51CTO学院 知识点 SQL语句的执行顺序 限定符号的使用. 具体内容: 如果想要对所选择的数据进行控制,就可以使 ...
- Python初学者第十天 集合、十六进制
10day 数据类型:集合 set 1.集合的定义 集合:无序的.不重复的数据组合. 特性:a.去重,把一个列表变成集合,就自动去重了 b.关系测试.测试两组数据之间的交集.差集.并集等关系 2.集合 ...
- centos7 nginx访问目录403解决
查看 /usr/sbin/sestatusSELinux status是不是enabled 然后 vi /etc/selinux/config修改:SELINUX=disabledreboot
- Spark Executor内幕彻底解密:Executor工作原理图、ExecutorBackend注册源码解密、Executor实例化内幕、Executor具体工作内幕
本课主题 Spark Executor 工作原理图 ExecutorBackend 注册源码鉴赏和 Executor 实例化内幕 Executor 具体是如何工作的 Spark Executor 工作 ...
- 深入编解码:ASCII,UNICODE,UTF8等
ASCII ASCII = American Standard Code for Information Interchange(美国信息交换标准码) 美国最先有了计算机技术,计算机里面只有01,也就 ...
- Spring 的下载、安装和使用
一.下载 Spring 下载地址:http://repo.spring.io/libs-release-local/org/springframework/spring/4.0.6.RELEASE/ ...
- hdu-2619 Love you Ten thousand years
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2619 题目大意: 求出小于n的数的个数,满足ki mod n,1≤i≤n是模n的完全剩余系 解题思路 ...
- python 爬取猫眼下的榜单(一)--单个页面
#!/usr/bin/env python # -*- coding: utf- -*- # @Author: Dang Kai # @Date: -- :: # @Last Modified tim ...