上传文件我们需要做三步。
①在页面中能选择文件上传;
②能够将二进制数据转为byte数组,然后存入数据库中,注意数据库字段的类型;
③将文件保存到服务器。
@RequestMapping(value = "/upload") public void upload(UpLoadFile uploadFile) throws Exception { String msg = "上传成功!"; String originalFilename = uploadFile.getFile().getOriginalFilename(); long size = uploadFile.getFile().getSize(); String contentType = uploadFile.getFile().getContentType(); String uploadRoot = "xxx";// 服务器根路径 String folder = ""; folder = uploadRoot + folder; folder = StringUtils.replace(folder, "\\", "/"); File dir = new File(folder); if (!dir.exists()) { if (!dir.mkdirs()) { throw new Exception("creating directory failed!"); } } folder += "/" + "上传的文件名"; File outFile = new File(folder); byte[] appwar = uploadFile.getFile().getBytes();// 文件转byte 字节类型 // me.setAppwar(appwar);//MySQL数据库中用longblob类型来存储,最大单个存储文件为4G // this.mobileverDao.insert(me); try { uploadFile.getFile().transferTo(outFile);// 文件上传到服务器的地址 //使用transferTo(dest)方法将上传文件写到服务器上指定的文件。 } catch (IllegalStateException e) { throw new Exception("upload file is error!\n" + e.getMessage()); } //上传成功 }
文件已字节形式存储到数据库中。
MySQL数据库中BLOB类型分为以下四种
- TINYBLOB可变长二进制数据,最多255个字节
- BLOB可变长二进制数据,最多2的16次方-1个字节 即64K
- MEDIUMBLOB可变长二进制数据,最多2的24次方-1个字节 即16M
- LONGBLOB可变长二进制数据,最多2的32次方-1个字节 即4G
- 这几个类型之间的唯一区别是在存储文件的最大大小不同。
Oralce数据库中大数据类型分为BLOB和BFILE 两种,其中BLOB分为以下三种
BLOB全称为二进制大型对象(Binary Large Object)。它用于存储数据库中的大型二进制对象。可存储的最大大小为4G字节CLOB CLOB全称为字符大型对象(Character Large Object)。它与LONG数据类型类似,只不过CLOB用于存储数据库中的大型单字节字符数据块,不支持宽度不等的字符集。可存储的最大大小为4G字节NCLOB 基于国家语言字符集的NCLOB数据类型用于存储数据库中的固定宽度单字节或多字节字符的大型数据块,不支持宽度不等的字符集。可存储的最大大小为4G字节
BFILE 当大型二进制对象的大小大与4G字节时,BFILE数据类型用于将其存储在数据库外的操作系统文件中;当其大小不足4G字节时,则将其存储在数据库内部的操作系统文件中,BFILE列存储文件定位程序,此定位程序指向服务器上的大型二进制文件。
时间: 2024-10-01 22:23:10