私はユーザーにPDFファイルをダウンロードさせるWebアプリケーションを持っています。これはASP.NET MVCで、デスクトップブラウザ、iPhone、Android Chrome、およびWebビューのsetDownloadListener()をオーバーライドするネイティブのAndroidアプリですべて正常に動作します。AndroidブラウザはPDFファイルをダウンロードしません
ただし、デフォルトのAndroidブラウザを使用している場合、ダウンロードは機能していないようです。私はGalaxy Nexus 4.2.2とNexus S 4g 2.3.7でテストを行っています。私は両方のデバイスにインストールされているPDFビューアのアプリを持っています。
Android Chromeでテストすると、「ダウンロードを開始しています...」と表示され、ダウンロード完了の通知がステータスバーに表示されます。ユーザーはこの通知に触れて、pdfビューアでファイルを開くことができます。 Androidのデフォルトブラウザでは、トーストはなく、ダウンロードファイルは保存されません。
私は、ネットワーク上のwiresharkを入れて、私は次の要求を参照してください。
GET /appapth/ViewPDF/8383600280757433_11_05_2012 HTTP/1.1
Host: 192.168.1.117
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
X-Requested-With: com.google.android.browser
User-Agent: Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Galaxy Nexus Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Accept-Encoding: gzip,deflate
Accept-Language: en-US
Accept-Charset: utf-8, iso-8859-1, utf-16, *;q=0.7
Cookie: (lots o'cookie data)
と応答は次のとおりです。
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Content-Type: application/pdf
Content-Encoding: gzip
Expires: -1
Server: Microsoft-IIS/7.5
Set-Cookie: ___TempData=; path=/
Set-Cookie: ___TempData=(lot's o'cookie data); path=/; HttpOnly
Date: Mon, 01 Apr 2013 18:22:20 GMT
Content-Length: 48244
......YQ.....T...?J.h)...!E.S(lots o'binary data)
あなたはトレースアプリケーション/ PDFコンテンツがダウンロードされてから見ることができるようにします。私はcontent-dispositionヘッダーを使用していないことがわかり、応答はgzipエンコーディングでダウンロードされます。
デフォルトのAndroidブラウザではこれが動作しない理由は何ですか?ユーザーはダウンロードしたデータにアクセスすることができず、ビューアー(またはインテント)は開始されません。応答はただ静かに無視されます。私は、私たちのアクションフィルタを削除
更新----
を(私はAndroidのデフォルトブラウザがコンテンツ・処分を必要とするか、ダウンロードにGzipを好きではないが、私はちょうど推測していることを推測しています) Gzip圧縮を実装していて、 Content-Dispositionの添付ファイルヘッダーに追加しました。
public virtual ActionResult ViewPDF(string id)
{
try
{
byte[] pdf = GetPDFContent(id);
FileContentResult fcr = new FileContentResult(pdf, "application/pdf");
fcr.FileDownloadName = id + ".pdf";
return fcr;
}
とHTTPレスポンスは現在ありません:そう、私のコントローラでのMVCのコードは次のようである
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Content-Type: application/pdf
Expires: -1
Server: Microsoft-IIS/7.5
Content-Disposition: attachment; filename=433_07_05_2012.pdf
Set-Cookie: ___TempData=; path=/
Set-Cookie: ___TempData=(lots o'cookie data);path=/; HttpOnly
Date: Mon, 01 Apr 2013 19:56:07 GMT
Content-Length: 59069
%PDF-1.3 %.... 13 0 obj << (lots o'binary pdf data)
は、任意のgzipではなくなりましたし、コンテンツ配置はありますが、Androidのデフォルトにブラウザにはまだ目に見えるダウンロードはありません。
アップデート2 ---
はhttps://stackoverflow.com/a/5728859/90236とhttp://winzter143.blogspot.com/2012/03/android-handling-of-content-disposition.htmlとhttp://androidforums.com/application-development/256987-android-phone-download-issue-asp-net-website.htmlからの提案を試みたが、私はまだ同じ結果を得ます。
私は同じ問題を抱えています。ストックアンドロイドブラウザとDolphinブラウザはダウンロードできません。他のブラウザでは問題ありません。私はリンクしたすべての提案を試しました。 –
私の答えが見つかりました。それがあなたを助けることを願っています私はiFrameでダウンロードしていましたが、Androidブラウザはそれを気に入らないようでした。 にtarget = "_ blank"を追加してください。 –
残念ながら、これは私には当てはまりません - 私はFormStream経由でFileStreamResultを返すコントローラアクションへのダウンロードを開始します。 –