oracle的blob字段中存储的是图片文件转化后的二进制流
现用java从取到该字段对应的inputStream之后,如何读取到原图片的文件名及后缀名
急啊!!!

解决方案 »

  1.   

    inputStream 还能读出文件名?不可能哇
      

  2.   

    inputStream读取的是文件存储的内容, 而文件名却不是, 他们是两个不相同的东西.
    要存储文件名, 你在设置表结构的时候就要考虑进去.
      

  3.   

    Stream是子节流,要转换成字符流,楼主用用io包下面的带reader的类或者接口吧,那些都是字符流.
      

  4.   

    lz  可以参考http://www.jspcn.net/htmlnews/2005011.html
    http://www.newasp.net/tech/java/15576.html
    http://www.zhuoda.org/lunzi/20971.html
      

  5.   

    blob如果存的只是图片的内容。那么这个是与文件名没有任何关系的。所以不可能有文件信息我不知道你想要文件名做什么用?如果有必要,另外开个Varchar2的字段存储它就行了。
      

  6.   

    感谢各位的参与,谢谢!另开varchar2字段的方式比较基础,如果仅仅是为了实现所需的功能可以采用。
    不过为了进一步学习,我想深究一下,有个2启发点如下,供大家参考:
    1:用纯二进制流存储图片到blob,按照上面几位朋友的说法理论上是无法找到文件后缀的,但是用
    PLSQL Developer查看这个blob字段的时候,在img项的左下角会看到文件的后缀和文件宽,高。
    既然PLSQL Developer能从二进制流中抓取到文件后缀名和图片的宽高信息,那么我想用java应该是可以实现的
    2:Java代码:
    response.setHeader("Content-disposition", "attachment;filename=" + fileName);
    然后将byte[]写入response.getOutputStream();
    变量 fileName 我不加后缀,在xhtml页面通过下载按钮点导出保存时会发现,系统默认的文件名后面是有后缀的,且后缀的确与原图片的后缀一致(直接点打开是没有后缀的)
    从这一点来看,IE也是可以得到文件后缀的。
    中间细节肯定很多,我将继续努力探索,虽然路途可能会很艰辛。
    同时期待高人指点一下!
      

  7.   

    一般数据库在存放图形文件的内容时,文件的的属性信息会保存在二进制信息的同一条记录的不同字段中。
    也就是说与Blob字段相同记录的其他字段中。
    当然,如果同一文件有多个相同性质的属性时,也可以分表保存(比如,多个名称表示同一文件),但这种情况,一般都会通过ID将相关属性表进行关联。
    楼主说的,一般图形文件中,本身会包含一些文件的相关属性,这个是正确的。
    但是,每种图形文件的格式是不形同的,所以,我们要先确定图像的类型比较好。
    如果表中所有图形文件的类型是相同的,可以考虑看看文件内容中是否有文件名的信息。
    我看了一下,常用的JPEG和GIF文件格式中,都没有包含文件名的信息,但,包含了图像的宽和高。
    当然,GIF文件的格式中,是允许添加用户自定义数据的。对于音频文件来讲,也会有类似内容出现,但是,很多内容都不是必须填写的。
    比如:专辑名称、歌唱家等等。
      

  8.   

    看了6楼的内容,
    我想,无论怎样做,要达到楼主的目的,那就要先熟习常用图形文件的格式了(压缩编码就不用看了)。
    PLSQL 我基本没怎么用过,所以,也不知道他的实现机制。
    不过,网页提交这块内容,我大致还是知道一些的。
    浏览器在提交图形文件时HTTP协议的头部,会指明要提交数据的文件格式。
    一般格式有  text/html  、   GIF/JPEG  等等。
    当然,如果服务端要响应一个图形文件的请求时,HTTP协议的头部,也会带有这个文件的格式信息。
    以上这些,可以通过抓包抓取。
    呵呵。还是先熟习图形文件的格式吧,我觉得,这个对于实现楼主的目的,比较重要。
      

  9.   

    当然,还有一个效率比较低的方法有可能搞得定。
    就是通过ImageIO读取数据库传来的InpuStream内容,得到BufferedImage对象,
    通过他来试图读取图像的相关属性之类的内容。