【问题标题】:Can't read PDF downloaded from server无法读取从服务器下载的 PDF
【发布时间】:2015-04-17 17:29:43
【问题描述】:

我正在从我的服务器下载 PDF。 服务器向我发送HttpResponse 和文件正文的InputStream。 我可以将其写入文件,但是当我尝试使用 PDF 阅读器阅读时,它告诉我文件可能已损坏。

我还注意到直接从网络服务下载的 PDF 的大小是通过我的应用程序下载的 PDF 大小的两倍。

我用来下载和编写PDF文件的代码是这样的:

String fileName = //FILENAME + ".pdf";
        fileName = fileName.replaceAll("/", "_");
        String extPath = Environment.getExternalStorageDirectory().toString();
        String folderName = //FOLDERNAME;

        try {
            File folder = new File(extPath, folderName);
            folder.mkdir();

            File pdfFile = new File(folder, fileName);
            pdfFile.createNewFile();

            URL url = new URL(downloadURL);
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
            urlConnection.connect();

            InputStream inputStream = urlConnection.getInputStream();
            FileOutputStream fileOutputStream = new FileOutputStream(pdfFile);

            byte[] buffer = new byte[MEGABYTE];
            int bufferLength;
            while((bufferLength = inputStream.read(buffer))>0 ){
                fileOutputStream.write(buffer, 0, bufferLength);
            }
            fileOutputStream.close();

            Uri path = Uri.fromFile(pdfFile);
            Intent pdfIntent = new Intent(Intent.ACTION_VIEW);
            pdfIntent.setDataAndType(path, "application/pdf");
            pdfIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            try {
                startActivity(pdfIntent);
            } catch (ActivityNotFoundException e) {
                Toast.makeText(getApplicationContext(), "No Application available to view PDF", Toast.LENGTH_SHORT).show();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
//otherStuff

我哪里出错了?

我还注意到HttpResponseHeaders 内部包含Content-type:text/html。它应该类似于text/pdf

【问题讨论】:

  • 你能从应用程序外部打开文件吗(意味着从文件资源管理器)?
  • 不。即使在应用程序之外打开也会告诉我它已损坏。

标签: android pdf httpresponse


【解决方案1】:

您的下载代码似乎正确。基于此和您的评论:

我还注意到,直接从 Web 服务下载的 PDF 的大小是通过我的应用程序下载的 PDF 大小的两倍。”

我建议检查您的网址。看来您可能正在下载 html 页面而不是 pdf。要验证您是否正确下载,请按如下方式更改下载目录:

//Default download directory
String extPath = Environment.DIRECTORY_DOWNLOADS;

并检查下载内容的目录(通过文件系统,例如将手机安装到您的计算机或文件管理器应用程序)以验证它是 pdf。

【讨论】:

  • 由于我将文件命名为“.pdf”,它总是会告诉我这是一个 pdf
  • Correct ;) 让我澄清一下: 1. 在 2 或 3 个不同的 URL 上尝试您的代码。 2. 尝试使用标准 PDF 查看器(例如 adobe reader)打开它们 3. 如果您的 URL 的 pdf 无法打开(说它已损坏)而其他 pdf 可以打开,那么您正在下载 HTML 页面。
  • 尝试使用不同的 URL,更改 PDF 视图(谷歌查看器、保管箱查看器和 adobe),但我永远无法打开它
  • 你能把你的网址贴在这里吗?
  • 我宁愿不这样做,因为不是我的服务器。但是类似于 serverUrl/rest/myMethod?param1=value1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 2019-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多