0

我的应用会收到来自其他应用(包括 Dropbox)的共享请求。我需要知道我收到的是哪种文件,但我从 Dropbox 获得的 mime 类型是“text/plain”。例如:

Intent i = getIntent();
String sMimeType = i.getType();  //Value = "text/plain"
String sExtraText = i.getStringExtra(Intent.EXTRA_TEXT);   //Value = "http://db.tt/tH42K3B7"

我需要知道图像、视频和音乐文件之间的区别。有没有办法根据意图中的信息来确定文件类型?或者有没有办法使用 Dropbox API 来做到这一点?

谢谢,-格雷格雷诺

编辑:基于 smarx 提出的解决方案,我在这里找到了一些 Android 代码: Android - Detect URL mime type? . 然后添加了这个:

sLocation = connection.getHeaderField("location");
mimeType = URLConnection.guessContentTypeFromName(sLocation);
4

1 回答 1

1

我不确定这里的规范是什么,但我认为这text/plain是指在意图中共享的数据类型。(因为它是一个 URL,所以纯文本似乎很合适。)

从 URL 中,您可以通过发出HEAD请求找到 MIME 类型。首先解析缩短的链接以获得完整的共享链接(在Location标题中)。www.dropbox.com然后通过替换将共享链接转换为内容的直接链接dl.dropboxusercontent.com。(请参阅https://www.dropbox.com/help/201。)然后发出HEAd请求并查看Content-Type标头:

$ http HEAD http://db.tt/tH42K3B7
HTTP/1.1 302 FOUND
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Date: Mon, 26 Aug 2013 15:12:32 GMT
Server: nginx
cache-control: no-cache
location: https://www.dropbox.com/s/dmbdlf56t043miq/2012-02-11%2019.56.17.jpg
pragma: no-cache

$ http HEAD https://dl.dropboxusercontent.com/s/dmbdlf56t043miq/2012-02-11%2019.56.17.jpg
HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: image/jpeg
Content-length: 1560063
Date: Mon, 26 Aug 2013 15:12:52 GMT
Server: nginx
X-RequestId: a2c4d393af5e0eee80d6f33f68762fd4
accept-ranges: bytes
cache-control: max-age=0
etag: 1525n
pragma: public
x-dropbox-request-id: 23f50be73831cde4f39a12d5e3f0af78
x-server-response-time: 1149

(PS 我使用的工具是httpie。你可以用 . 做同样的事情curl -I。)

于 2013-08-26T15:18:35.047 回答