以前做过这个,但是记得没有什么特殊问题。好久不搞java了,只能提一些建议,不防试一下。1、看你tomcat里面的配置,mime配置,是否全面。
例如:<mime-type>application/msexcel</mime-type>
这个要写全,不过新版本的应该都比较全了,我是05年用的某个版本,记得是有问题的,版本号可记不清了。2、加一个catch看一下,看是否能得到全面的错误描述。3、如果只是得到部分,而且能确定是文件的前面部分,建议把得到的部分保存,用beyond-compare等工具按照字节比较,看是否完全一致一致。然后再根据具体情况判断。如果不一致,有可能是server/browser端之间配置不对。
例如:<mime-type>application/msexcel</mime-type>
这个要写全,不过新版本的应该都比较全了,我是05年用的某个版本,记得是有问题的,版本号可记不清了。2、加一个catch看一下,看是否能得到全面的错误描述。3、如果只是得到部分,而且能确定是文件的前面部分,建议把得到的部分保存,用beyond-compare等工具按照字节比较,看是否完全一致一致。然后再根据具体情况判断。如果不一致,有可能是server/browser端之间配置不对。
socket也可以的
如果HTTP包中含有If-ModifiedSince, If-Unmodified-Since, If-Match, If-None-Match, 或 If-Range等头字段,则GET也就变成了”条件GET“,即只有满足上述字段描述的条件的实体才被取回,这样可以减少一些非必需的网络传输,或者减少为获取某一资源的多次请求(如第一次检查,第二次下载)。(一般的浏览器,都有一个临时目录,用来缓存一些网页信息,当再次浏览某个页面的时候,只下载那些修改过的内容,以加快浏览速度,就是这个道理。至于检查,则常用比GET更好的方法HEAD来实现。)如果HTTP包中含有Range头字段,那么请求URI指定的实体中,只有决定范围条件的那部分才被取回来。(用过多线程下载工具的朋友,可能比较容易理解这一点)
这个方法的典型应用,用来从web服务器下载文档。HttpClient定义了一个类叫GetMethod来支持这个方法,用GetMethod类中getResponseBody, getResponseBodyAsStream 或 getResponseBodyAsString函数就可以取到应答包包体中的文档(如HTML页面)信息。这这三个函数中,getResponseBodyAsStream通常是最好的方法,主要是因为它可以避免在处理下载的文档之前缓存所有的下载的数据。GetMethod get = new GetMethod("http://jakarta.apache.org");
// 执行方法,并处理失败的请求.
...
InputStream in = get.getResponseBodyAsStream();
// 利用输入流来处理信息。
get.releaseConnection();