java利用HttpURLConnection读取二进制并返回?

能不说就不说 发布于 2014/02/19 13:42
阅读 2K+
收藏 1

菜鸟求指导!功能是实现从安卓手机网络下载文件,用的以下代码

String urlStr ="http://192.168.1.111:8083/down/1.pdf";
URL url = new URL(urlStr);
 conn = (HttpURLConnection)url.openConnection();
 conn.setDoOutput(true);
 conn.setRequestMethod("POST");
 //获取下载文件的总大小
 fileSize = conn.getContentLength();
 System.out.println("fileSize "+fileSize);
...文件保存

这样是能得到文件长度和下载的,但是我的pdf文件是作为二进制存储到oracle数据库中的,而我用上边这个方法的话必须要先从服务器把数据库中的二进制保存成文件,然后再把文件地址传入上边的方法,才能成功下载,本来以为客户端发送连接请求,服务器收到请求后,先用输入流从数据库读出数据,然后输出流输出,客户端就会收到数据流,可是试了下返回的conn.getContentLength()都为-1,读取不到HttpURLConnection内容的长度!难道是返回类型不对吗?我应该用什么类型返回或者输出?求各位大侠不吝赐教,小弟万分感谢!简单点就是服务器收到请求后直接从oracle库中取出数据流然后返回给安卓客户端接收并保存成文件!

加载中
0
巴顿
巴顿
不是应该以流的形式返回么?response.getOutputStream();
能不说就不说
能不说就不说
回复 @巴顿 : 是没有读取到数据,数据长度为0了
巴顿
巴顿
回复 @开挂都挂了 : 你将你后端返回数据流的代码贴下给大家看下嘛
能不说就不说
能不说就不说
能否给点详细例子?我用OutputStream os =response.getOutputStream();返回好像不行
0
南湖公明
南湖公明
你的Conn是URL,如果文件数据还在数据库上,相当于说文件没有建立,URL指向文件地址肯定也读不到数据。URL是定位到文件资源,要用url conn,就要有文件存在。要用数据库存的数据,只能用其他IO读取数据。
能不说就不说
能不说就不说
你的意思是我要换请求方式,然后读取数据流?
0
Eric李
Eric李
服务端接收请求,处理相应业务(在这里比如说返回pdf的二进制数据),然后将二进制数据丢到服务端的输出流中,用response返回客户端,客户端就可以拿输入流去读服务端返回的输出流...
能不说就不说
能不说就不说
我也是这么想的,可是返回的流我取到的是空的,能不能给个实例?
返回顶部
顶部