首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用程序方法总是返回‘getContentType /force-download’

应用程序方法总是返回‘getContentType /force-download’
EN

Stack Overflow用户
提问于 2013-05-09 19:06:45
回答 3查看 4.6K关注 0票数 0

我有一个文件的URL,我可以下载。它看起来是这样的:

代码语言:javascript
复制
 http://<server>/recruitment-mantis/plugin.php?page=BugSynchronizer/getfile&fileID=139&filehash=3e7a52a242f90c23539a17f6db094d86

如何获取该文件的内容类型?我必须管理,在这种情况下很简单:

代码语言:javascript
复制
   URL url = new URL(stringUrl);

   URLConnection urlConnection = url.openConnection();
   urlConnection.connect();

   String urlContent = urlConnection.getContentType();

在每个文件中返回application/force-download内容类型(无论是jpg还是pdf文件)。我想要这样做,因为我想设置下载文件的扩展名(可以是各种的)。如何“绕过”这种application/force-download内容类型?提前感谢您的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-09 19:24:23

检查urlConnection.getHeaderField("Content-Disposition")中的文件名。通常,该标头用于多部分内容中的附件,但检查一下也无伤大雅。

如果该标头不存在,您可以将该URL保存到一个临时文件中,并使用probeContentType获得有意义MIME类型:

代码语言:javascript
复制
Path tempFile = Files.createTempFile(null, null);
try (InputStream urlStream = urlConnection.getInputStream()) {
    Files.copy(urlStream, tempFile, StandardCopyOption.REPLACE_EXISTING);
}
String mimeType = Files.probeContentType(tempFile);

请注意,如果probeContentType不能确定文件的类型,它可能会返回null。

票数 1
EN

Stack Overflow用户

发布于 2013-05-22 02:02:47

如何“绕过”此应用程序/强制下载内容类型?

我上传的内容类型也有同样的问题。尽管您可以信任URL中的content-type,但我还是选择使用content-type实用程序从字节内容中确定内容。

在尝试了5次左右的实现之后,我决定重新发明轮子,并发布了我的SimpleMagic package,它利用神奇的(5) Unix内容类型文件来实现与Unix file(1)命令相同的功能。它使用内部配置文件,或者可以读取/etc/magic/usr/share/file/magic或其他魔术(5)文件,并从FileInputStreambyte[]确定文件内容。

github源代码的位置、javadoc和一些文档都可以在主页上找到。

使用SimpleMagic,您可以执行类似以下操作:

代码语言:javascript
复制
ContentInfoUtil util = new ContentInfoUtil();
ContentInfo info = util.findMatch(byteArray);

它根据数据的内容(FileInputStreambyte[])工作,而不是文件名。

票数 1
EN

Stack Overflow用户

发布于 2013-05-09 19:18:25

我猜这个内容类型是从你下载的服务器上设置的。一些服务器使用这种内容类型来强制浏览器下载文件,而不是尝试打开它。例如,当我的服务器返回内容类型"application/ pdf“时,chrome会尝试将其作为pdf打开,但当服务器返回"application/force-download”时,浏览器会将其保存到磁盘上,因为他不知道如何处理它。

因此,您需要更改服务器以返回正确的内容类型,或者更好地尝试一些其他启发式方法来获取正确的文件类型,因为服务器可能总是通过将其设置为jpg而给您一个exe来欺骗您。

我看到在Java7中你可以尝试这个方法:http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#probeContentType%28java.nio.file.Path%29

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16460306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档