确定下载的(二进制数据)文件的文件名和扩展名

Determinating filename and extention of downloaded (binarydata) file

大家好,我正在使用 org.apache.http 库从网上下载文件。该文件作为条目添加到网页(HttpResponce object 上的 .getEntry())但文件名似乎未在网页的 header 或 url.内容类型为 application/octet-stream。问题是,当我在浏览器中执行相同的操作时,它们都会获得文件名和扩展名。所以我猜它存储在二进制文件的 meta-data 中,但我不知道如何分析它。对此的任何提示都会有所帮助。

我获得以下 headers:

x-amz-id-2 : dZjzVbXsHqs+dUXmJ34Nahd1wNFSaZcH0RXC54kmCEvZvj8vNaxtVViDTZB+4kV8
x-amz-request-id : 81D2B0A0469A1902
Date : Sat, 31 Jan 2015 16:18:36 GMT
Last-Modified : Sat, 17 Jan 2015 17:17:52 GMT
ETag : "3a37a8e78c37b3cb575d65539db6326c"
Accept-Ranges : bytes
Content-Type : application/octet-stream
Content-Length : 23905396
Server : AmazonS3

来自HTTP Specification

Content-Type

The Content-Type entity-header field indicates the media type of the entity-body sent to the recipient or, in the case of the HEAD method, the media type that would have been sent had the request been a GET.

Content-Disposition

The Content-Disposition response-header field has been proposed as a means for the origin server to suggest a default filename if the user requests that the content is saved to a file.

所以你可以使用Content-Dispositionheader来标识一个默认的文件名。

如果服务器未响应 Content-Disposition header,则由您来识别资源。随心所欲地称呼它。探测内容以找出它是什么。这是一项非常重要的任务,这就是为什么服务器应该发送该信息的原因。

(貌似) chrome之所以能查到名字是因为.apk是基于zip格式的。 zip 文件包含一些 header they can identify it as zip with a so called Magic number