Android - 从URL打开PDF,文件名由Intent通过HTTP标头设置

时间:2013-02-27 09:31:15

标签: android android-intent

我写了一个小型Android应用程序,其中包含指向网络上PDF文件的链接。问题是,链接是没有正确文件后缀的通用链接。然而,为该文件提供服务的网络服务器将发送一个带有正确后缀的真实文件名,并强制webbrowser以一个好名字保存文件(这是文件下载的常见做法)。 这适用于任何桌面浏览器,如FF或IE,但如果我在Android上启动VIEW Intent,它会在原始文件下开始下载,从而生成一个没有后缀且与任何程序无关的文件。

(安装了Adobe Reader并手动重命名下载即可开启)

实施例: “http://mysample.com/file/6dbfj73bdngdn3”的链接将被标题更改为“mysamplefile.pdf”

这是服务器上的PHP代码段,设置下载文件的标题:

header("Expires: 0");
header("Pragma: public");
header("Cache-Control: private, must-revalidate, post-check=0, pre-check=0");
header("Content-length: 12345");
header("Content-type: application/force-download; filename=\"mysamplefile.pdf\"");
header("Content-type: application/octet-stream; filename=\"mysamplefile.pdf\"");
header("Content-type: application/download; filename=\"mysamplefile.pdf\"");

我尝试了几种打开意图的方法,这是我现在的方法。如果我指定一个mime类型,我会得到一个ActivityNotFoundException,如果我不这样做,我会在原始文件名下面得到上面提到的下载而没有后缀。

String url = "http://mysample.com/file/6dbfj73bdngdn3";
//Intent i = new Intent(Intent.ACTION_VIEW);
//i.setDataAndType(Uri.parse(url), "application/pdf");
Intent i = new Intent(Intent.ACTION_VIEW, URI.parse(url));

2 个答案:

答案 0 :(得分:1)

我最终通过它的Intent在Webbrowser中打开了URL。问题是这个浏览器对你发送的标题特别挑剔。如果你在每个元素之间的Content-Type标题中有空格,Android会忽略它们。

错:

header("Content-type: application/download; filename=\"mysamplefile.pdf\";");

正确:

header("Content-type: application/download;filename=\"mysamplefile.pdf\"");

答案 1 :(得分:-1)

String url = "http://mysample.com/file/6dbfj73bdngdn3";
WebView mWebView=new WebView(MyPdfViewActivity.this);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setPluginsEnabled(true);
mWebView.loadUrl("https://docs.google.com/gview?embedded=true&url="+url );
setContentView(mWebView);

这将在谷歌文档内的webview中打开pdf - Linkto是你的pdf文件的URL

我不确定这是否是您希望希望以某种方式帮助

但你的网址正在重新调整doc dsnt存在的错误