将数据库中BLOB字段中的二进制内容转换为文件mySQL

时间:2012-01-17 07:55:26

标签: java mysql database blob

我必须从db中检索LONGBLOB字段中的二进制文件。这个字段存储各种文件格式,如txt,doc,xdoc,pdf等。我基本上需要能够将二进制格式转换为它们的实际文件格式,以便我的用户可以下载这些文件。

有谁知道怎么做?

4 个答案:

答案 0 :(得分:2)

正如其他人所说,最好还有另一个字段来存储格式。您可以通过复制扩展名(即文件名中最后一个“。”之后的所有内容)来完成此操作。最好的方法可能是获取文件的mime类型:see this for example

然后,您可以将mime类型存储在数据库的字段中。这几乎总是有效,而文件的扩展可能会产生误导(或模糊)。

答案 1 :(得分:1)

添加一个字段file_format,指示存储在LONGBLOB中的文件的文件格式,然后您就可以根据相关的文件格式转换二进制文件。

或者,保留文件格式的前几个字节,之后是文件的实际内容。

答案 2 :(得分:1)

我认为你应该有另一个字段来保存文档类型并告诉应该转换哪种类型。使用I / O InputStream来读/写文件。

我建议将客户端文件上传到某处,将链接到这些文件的路径保存到db。那应该更快。

答案 3 :(得分:0)

正如其他人所说的那样。在数据库中创建另一个列(FILETYPE_COL_NAME),它将告诉您BOLB(BLOB_COL_NAME)字段中存储了哪种类型的文件,然后在try/catch块中扩展以下代码

String fileType = rs.getString("FILETYPE_COL_NAME"); 

DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream("filepath."+fileType )));

ResultSet rs = statement.executeQuery("Select * from tablename");

BufferedInputStream bis = new BufferedInputStream(rs.getBinaryStream("BLOB_COL_NAME"));

byte[] buffer = new byte[1024];

int byteread = 0;

while((byteread = bis.read(buffer)) != -1){
        dos.write(buffer, 0, byteread);
}

dos.flush();
dos.close();
bis.close();