Webアプリケーションを介してブラウザーでファイルを使用できるようにしている場合は、通常、URLをhttp://website.com/webapp/download/89347/image.jpg
のように設定します。次に、HTTPヘッダーContent-Type: application/octet-stream; filename=image.jpg
およびContent-Disposition: Attachment
を設定します。
ただし、Androidでは。ファイルをダウンロードするには、Content-Type: image/jpg
を設定するしかありません。そうでない場合、ファイル名は<Unknown>
となり、エラーが発生します
ダウンロード失敗
ダウンロードできません。この電話ではコンテンツはサポートされていません
Androidを取得して、MIMEタイプのリストを保持せずにブラウザからファイルをダウンロードして開く方法はありますか?
すべてのダウンロード(特に古いバージョン)でダウンロードを機能させるには、Android=バージョンを期待どおりにするには、次のことを行う必要があります...
詳細については私のブログ投稿を読んでください:
http://digiblog.de/2011/04/19/Android-and-the-download-file-headers/
Dmitriy(または他の解決策を模索している人)がダウンロードしたファイルにHTMLページが表示されている場合、これはHttpRequest GETの問題が原因であると考えられます。典型的なシナリオは、次のPOST、リダイレクト、GETモデルです。
AndroidブラウザーがHttpRequest POST=をサーバーに発行します(たとえば、送信ファイルまたはダウンロードファイルを要求するためのリンク、filename.extが言う)
サーバーは、要求されたfilename.extをバイトにストリーミングし、セッション変数に格納してから、たとえばResponse.RedirectをDownload.aspxに発行して、応答オブジェクトの構築を処理します。
Androidブラウザーは、HttpRequest GETをDownload.aspxのサーバーに正しく送信します
サーバーは典型的なContent-Disposition:添付ファイルで応答します。 filename = "filename.ext"スタイルの構成要素。要求されたfilename.extを含む応答オブジェクトがあり、セッション変数のバイト数です。
Androidダウンロードマネージャーは、サーバーにDownload.aspxの別のHttpRequest GETを送信すると思います。ダウンロードマネージャーは、前の "attachment"応答を、この2番目のGETを送信するトリガーとして解釈していると思います。
サーバー(Download.aspx)は、ブラウザーに送り返す応答オブジェクトを作成しようとします。
Androidダウンロードマネージャーは、2番目のDownload.aspxからの応答オブジェクトのコンテンツを使用して、filename.extをダウンロードします。
多くのシナリオではこれで問題ありません。ただし、たとえば、Download.aspxコード内のサーバーがハウスキーピングを実行し、最初に呼び出されたときにセッション変数を削除すると、次回はセッション変数がなくなります。したがって、コードの記述方法によっては、応答オブジェクトが明示的に構築されず、Response.Endが呼び出されず、Download.aspxのhtmlのみが送信される可能性があります。
これは、Wiresharkを使用して発見したものですが、ダブルGETの原因はAndroidダウンロードマネージャーであると想定しています。
この説明がお役に立てば幸いです。
私が Androidからファイルをダウンロードする で書いたように:
Androidブラウザは、ボタンの[イベントを投稿]でファイルをダウンロードしません。ポストイベントでは、ファイルは.htmガベージファイルになります。これを克服するには、次のようにします。
ダウンロードボタンをクリックしてください
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
Response.Redirect("download-file.aspx");
}
and on download-file.aspx file do as below
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class mobile_download_file : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string filename = "usermanual.pdf";
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + "" + filename + "");
Response.Write(Server.MapPath(Request.ApplicationPath) + "\\" + filename);
Response.TransmitFile(Server.MapPath(Request.ApplicationPath) + "\\" + filename);
Response.End();
}
}
the same can be implemented in php also.
私はJspyブログのすべての推奨事項を試しましたが、今のところ何も機能していません。 Content-dispositionはブラウザをダウンロードモードにしますが、ダウンロードが開始されたページのHTML以外は何もダウンロードされません。だから私の結論は、それはグーグルからの純粋なバグであり、グーグルがそれを修正することを祈るだけかもしれない。私の回避策は、コンテンツタイプをAcceptヘッダーフォームのモバイルブラウザーからのタイプに設定することでした。通常は機能し、Zipファイルをテキストとしてダウンロードすることもできます。
理論的には、filenameパラメータはContent-TypeではなくContent-Dispositionに設定する必要があります。これがAndroidブラウザで役立つかどうかわかりません。