求助:如何从InputStream中取得文件名 oracle的blob字段中存储的是图片文件转化后的二进制流现用java从取到该字段对应的inputStream之后,如何读取到原图片的文件名及后缀名急啊!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 inputStream 还能读出文件名?不可能哇 inputStream读取的是文件存储的内容, 而文件名却不是, 他们是两个不相同的东西.要存储文件名, 你在设置表结构的时候就要考虑进去. Stream是子节流,要转换成字符流,楼主用用io包下面的带reader的类或者接口吧,那些都是字符流. lz 可以参考http://www.jspcn.net/htmlnews/2005011.htmlhttp://www.newasp.net/tech/java/15576.htmlhttp://www.zhuoda.org/lunzi/20971.html blob如果存的只是图片的内容。那么这个是与文件名没有任何关系的。所以不可能有文件信息我不知道你想要文件名做什么用?如果有必要,另外开个Varchar2的字段存储它就行了。 感谢各位的参与,谢谢!另开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也是可以得到文件后缀的。中间细节肯定很多,我将继续努力探索,虽然路途可能会很艰辛。同时期待高人指点一下! 一般数据库在存放图形文件的内容时,文件的的属性信息会保存在二进制信息的同一条记录的不同字段中。也就是说与Blob字段相同记录的其他字段中。当然,如果同一文件有多个相同性质的属性时,也可以分表保存(比如,多个名称表示同一文件),但这种情况,一般都会通过ID将相关属性表进行关联。楼主说的,一般图形文件中,本身会包含一些文件的相关属性,这个是正确的。但是,每种图形文件的格式是不形同的,所以,我们要先确定图像的类型比较好。如果表中所有图形文件的类型是相同的,可以考虑看看文件内容中是否有文件名的信息。我看了一下,常用的JPEG和GIF文件格式中,都没有包含文件名的信息,但,包含了图像的宽和高。当然,GIF文件的格式中,是允许添加用户自定义数据的。对于音频文件来讲,也会有类似内容出现,但是,很多内容都不是必须填写的。比如:专辑名称、歌唱家等等。 看了6楼的内容,我想,无论怎样做,要达到楼主的目的,那就要先熟习常用图形文件的格式了(压缩编码就不用看了)。PLSQL 我基本没怎么用过,所以,也不知道他的实现机制。不过,网页提交这块内容,我大致还是知道一些的。浏览器在提交图形文件时HTTP协议的头部,会指明要提交数据的文件格式。一般格式有 text/html 、 GIF/JPEG 等等。当然,如果服务端要响应一个图形文件的请求时,HTTP协议的头部,也会带有这个文件的格式信息。以上这些,可以通过抓包抓取。呵呵。还是先熟习图形文件的格式吧,我觉得,这个对于实现楼主的目的,比较重要。 当然,还有一个效率比较低的方法有可能搞得定。就是通过ImageIO读取数据库传来的InpuStream内容,得到BufferedImage对象,通过他来试图读取图像的相关属性之类的内容。 突然有一点迷惑,关于私有变量 关于从jdk1.3升级到jdk1.5,有几个疑问 关于JDBC JTable 的拖拉时的滚动条问题?急!急!急! 滚动字幕 两个线程间的切换用 wait 和 notify 来实现, 同个线程中的延时由用 sleep 来实现. 这么说对吗? 100分!!!文件流的问题~??? 网上哪有关于java安全(加密解密)的资料?? 请给初学Java的Freshman一个建议! 我想学java,朋友们帮帮忙 break 标签,为什么总是出错。。。 求一思路和算法
要存储文件名, 你在设置表结构的时候就要考虑进去.
http://www.newasp.net/tech/java/15576.html
http://www.zhuoda.org/lunzi/20971.html
不过为了进一步学习,我想深究一下,有个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也是可以得到文件后缀的。
中间细节肯定很多,我将继续努力探索,虽然路途可能会很艰辛。
同时期待高人指点一下!
也就是说与Blob字段相同记录的其他字段中。
当然,如果同一文件有多个相同性质的属性时,也可以分表保存(比如,多个名称表示同一文件),但这种情况,一般都会通过ID将相关属性表进行关联。
楼主说的,一般图形文件中,本身会包含一些文件的相关属性,这个是正确的。
但是,每种图形文件的格式是不形同的,所以,我们要先确定图像的类型比较好。
如果表中所有图形文件的类型是相同的,可以考虑看看文件内容中是否有文件名的信息。
我看了一下,常用的JPEG和GIF文件格式中,都没有包含文件名的信息,但,包含了图像的宽和高。
当然,GIF文件的格式中,是允许添加用户自定义数据的。对于音频文件来讲,也会有类似内容出现,但是,很多内容都不是必须填写的。
比如:专辑名称、歌唱家等等。
我想,无论怎样做,要达到楼主的目的,那就要先熟习常用图形文件的格式了(压缩编码就不用看了)。
PLSQL 我基本没怎么用过,所以,也不知道他的实现机制。
不过,网页提交这块内容,我大致还是知道一些的。
浏览器在提交图形文件时HTTP协议的头部,会指明要提交数据的文件格式。
一般格式有 text/html 、 GIF/JPEG 等等。
当然,如果服务端要响应一个图形文件的请求时,HTTP协议的头部,也会带有这个文件的格式信息。
以上这些,可以通过抓包抓取。
呵呵。还是先熟习图形文件的格式吧,我觉得,这个对于实现楼主的目的,比较重要。
就是通过ImageIO读取数据库传来的InpuStream内容,得到BufferedImage对象,
通过他来试图读取图像的相关属性之类的内容。