2013-04-01 11 views
6

私はユーザーに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/90236http://winzter143.blogspot.com/2012/03/android-handling-of-content-disposition.htmlhttp://androidforums.com/application-development/256987-android-phone-download-issue-asp-net-website.htmlからの提案を試みたが、私はまだ同じ結果を得ます。

+0

私は同じ問題を抱えています。ストックアンドロイドブラウザとDolphinブラウザはダウンロードできません。他のブラウザでは問題ありません。私はリンクしたすべての提案を試しました。 –

+0

私の答えが見つかりました。それがあなたを助けることを願っています私はiFrameでダウンロードしていましたが、Androidブラウザはそれを気に入らないようでした。 にtarget = "_ blank"を追加してください。 –

+0

残念ながら、これは私には当てはまりません - 私はFormStream経由でFileStreamResultを返すコントローラアクションへのダウンロードを開始します。 –

答えて

関連する問題