一、创建表
oracle:
create table baoxiandan (
id number(20) not null,
fileName varchar2(200) not null,
content blob,
primary key(id)
);
create sequence seq_baoxiandan;
二、Hibernate映射文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.erry.tntops.acer.model.impl.CarrierImpl"
table="BAOXIANDAN"
proxy="com.erry.tntops.acer.model.Carrier">
<id name="id" column="ID" type="long" unsaved-value="-1">
<generator class="sequence">
<param name="sequence">SEQ_BAOXIANDAN</param>
</generator>
</id>
<property name="fileName" column="filename" type="java.lang.String" not-null="false">
<meta attribute="caption">${tntops.acer.Carrier.code}</meta>
</property>
<property name="content" column="content"
type="byte[]">
<meta attribute="caption">${tntops.acer.Carrier.name}</meta>
</property>
</class>
</hibernate-mapping>
三、pojo类
import com.erry.tntops.common.model.impl.BaseModelImpl;
import com.erry.tntops.acer.model.Carrier;
import java.util.Date;
/**
* Created by IntelliJ IDEA.
* User: chenyang
* Date: 2008-7-28
* Time: 17:46:32
* To change this template use File | Settings | File Templates.
*/
public class CarrierImpl extends BaseModelImpl implements Carrier {
private long id;
private String fileName;
private byte content[];
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public byte[] getContent() {
return content;
}
public void setContent(byte[] content) {
this.content = content;
}
}
四、Java代码
1、入库
//获得文件名,fileNamePath为文件路径变量
String fileName = fileNamePath.substring(fileNamePath.lastIndexOf("\\") + 1);
File file = new File(fileNamePath);
InputStream inputStream = new FileInputStream(file);
byte[] data = new byte[] {};
data =
inputStreamToByte(inputStream);//将文件保存到字节数组中
Carrier carrier = (Carrier) SpringContext.getBeanOfType(Carrier.class);
carrier.setFileName(fileName);
carrier.setContent(data);
dao.create(carrier);
//将文件保存到字节数组中
private byte []
inputStreamToByte(InputStream is) throws IOException {
ByteArrayOutputStream bAOutputStream = new ByteArrayOutputStream();
int ch;
while((ch = is.read() ) != -1){
bAOutputStream.write(ch);
}
byte data [] =bAOutputStream.toByteArray();
bAOutputStream.close();
return data;
}
2、出库
byte data [] = new byte[]{};
File file =null ;
FileOutputStream fos = null;
InputStream in = null;
String hql = "select carrier from com.erry.tntops.acer.model.Carrier carrier where carrier.fileName=:fileName";
Map map = new HashMap();
map.put("fileName", fileName);
Collection collection = dao.retrieve(hql, map);
if(collection != null && collection.size() > 0){
Iterator it = collection.iterator();
Carrier carrier = (Carrier) it.next();
data = carrier.getContent();
}
//导出成文件
file = new File("d:\\" + fileName);
if (!file.exists()) {
file.createNewFile(); // 如果文件不存在,则创建
}
fos = new FileOutputStream(file);
int size = 0;
if (data.length > 0) {
fos.write(data, 0, data.length);
} else {
while ((size = in.read(data)) != -1) {
fos.write(data, 0, size);
}
in.close();
}
fos.close();
分享到:
相关推荐
在讨论如何将文件上传、下载并以二进制流的方式保存到数据库中时,首先需要了解几个关键概念:文件上传、文件下载、二进制流以及数据库操作。 文件上传通常指的是将本地或者网络上的文件通过网络上传到服务器。在...
本文将深入探讨如何实现从数据库中的二进制流转换为图片,并将其保存到本地文件系统。 首先,我们需要了解二进制流的基本概念。在计算机科学中,所有数据最终都会被转化为二进制形式,即由0和1组成的序列。图片文件...
当涉及到图像等非结构化数据时,一种常见的方法是将图片以二进制形式存入数据库。这种方法被称为“二进制大对象”(Binary Large Object,简称BLOB)。下面将详细阐述如何实现图片以二进制形式存入数据库,并从...
/**/////根据图片文件的路径使用文件流打开,并保存为byte[] FileStream fs = new FileStream(imagepath, FileMode.Open);//可以是其他重载方法 byte[] byData = new byte[fs.Length]; fs.Read(byData, 0, ...
标题“上传附件以二进制流的方式到数据库”涉及的技术点主要包括二进制流的理解、数据库设计以及文件上传和下载的实现。 一、二进制流 二进制流是计算机处理数据的一种形式,它将任何类型的数据(如文本、图像、...
"将图片存放进数据库(转换成二进制流)"这个主题,就是关于如何将图像文件以二进制形式存储到数据库中,然后从数据库中读取并以流的形式展示出来。下面我们将深入探讨这一技术。 首先,我们需要理解什么是二进制流...
这个过程涉及到将文件转换为二进制数据,然后将这些数据存储到数据库的特定字段中,通常是一个BLOB(Binary Large Object)类型。在给定的场景中,我们看到一个名为"SavePic.java"的文件,这可能是实现这一功能的...
当涉及到存储非结构化数据,如图片时,通常会以二进制大对象(BLOB)的形式来处理。本文将深入探讨如何在SQL Server 2008和Oracle数据库中保存和读取图片的二进制流。 1. **二进制流**:二进制流是一种数据表示方式...
这种方式虽然简化了图片显示的过程,不需要额外的HTTP请求获取图片URL,但也会带来一些挑战,如数据库性能可能会受到大容量二进制数据的影响,以及数据库备份和恢复的复杂性增加。 综上所述,这个修改版的UEditor...
总结来说,这段Java代码实现了连接到Access 2010数据库,读取其中存储的二进制图片数据,然后将这些数据转换并保存为本地的图片文件。这种方法在处理大量存储在数据库中的图像时非常有用,特别是在数据库集成的系统...
Oracle数据库提供了BLOB(Binary Large Object)数据类型,专门用于存储大对象,如图像、音频文件或任何其他二进制数据。 首先,我们需要了解二进制数据的存储过程。在Java或Python等编程语言中,我们可以读取图片...
这通常包括实例化类,添加工作表,填充数据,设置格式等步骤,然后保存为二进制文件。 "example_download.php"可能是一个展示如何让用户直接下载生成的XLS文件的例子。在Web环境中,通过HTTP响应头可以设置文件名和...
在数据库管理领域,存储和检索...综上所述,这三个数据库系统都有强大的能力来处理图片和二进制数据,而这些Java文件则提供了实现这一功能的具体代码示例。开发人员可以根据自己的需求选择合适的数据库系统和实现方式。
要将这些二进制数据导出到文件,我们需要编写相应的查询来获取这些数据,然后利用C#的文件操作功能将其写入硬盘。 在C#中,我们可以通过ADO.NET与SQL Server进行交互。首先,需要建立一个SqlConnection对象,连接到...
然后,我们将读取服务器上保存的图片文件,将其二进制内容插入到数据库: ```java File imageFile = new File("uploads/" + part.getSubmittedFileName()); FileInputStream fis = new FileInputStream(imageFile);...
总的来说,这个过程涉及到数据库操作、二进制数据处理和PDF文档的生成与操作,这些都是Java开发中常见的技能点,特别是对于处理服务器端业务逻辑和服务接口的开发者来说。了解这些技术可以帮助开发者实现从数据库...
在MySQL数据库中存储二进制大对象(BLOB)数据,如图片,是常见的做法,因为这种方式便于管理和检索。在本示例中,我们将探讨如何查询包含二进制图片数据的MySQL数据库,并通过JSP(JavaServer Pages)展示这些图片...
本文将深入探讨如何将图片转换为二进制格式,然后生成Base64编码字符串,以及如何将这些字符串重新转换回图片。这个过程在很多场景下都有应用,比如在网络上传输图片数据,或者在数据库中存储图片。 首先,我们需要...
// 在这里处理二进制流,例如保存到硬盘或数据库 } return RedirectToAction("Index"); } ``` **文件下载**: 文件下载同样基于HTTP响应,服务器通过Response对象将文件内容以二进制流的形式发送回客户端。为了...
通过阅读这份文档,你可以了解到如何将文件流技术应用到MySQL的大文本和二进制文件操作中。 综上所述,MySQL提供了存储大文本和二进制文件的能力,而Java的`BufferedInputStream`和`BufferedOutputStream`则是处理...