16

ファイルのダウンロードで問題が発生し、ダウンロードによってすべてのスペースがアンダースコアに置き換えられます。

基本的に私はここで問題を抱えています:

Response.AddHeader("Content-Disposition", 
    "attachment; filename=" + someFileName);

問題は、「check this out.txt」のように someFileName にスペースが含まれている場合、ユーザーは「check_this_out.txt」をダウンロードするように求められることです。

ファイル名をUrlEncodeするのが最善の選択肢だと思ったので、試してみました

HttpUtility.UrlEncode(someFileName);

しかし、スペースをプラス記号に置き換えているので、困惑しました。それで、私はちょうど試しました

HttpUtility.UrlEncode(HttpUtility.UrlDecode("%20"))

デコードは適切に機能し、スペースを与えますが、エンコードはスペースを取り、プラス記号を再び与えます。

ここで何が欠けていますか、これは正しいですか? もしそうなら、どのようにしてスペースを%20に適切にエンコードする必要がありますか?これは私が必要とするものです.

4

5 に答える 5

16

基本的に、%20 と + の両方がスペースをエンコードする有効な方法です。明らかに、UrlEncode メソッドはオプションの1 つを選択する必要があります... 他の方法を選択した場合、他の誰かがUrlEncode(UrlDecode("+"))「%20」を返す理由を尋ねたでしょう...

いつでもエンコードできます。その後、「+」で「%20」の単純な文字列置換を行うだけです。私はそれがうまくいくと思う...

于 2009-10-13T16:59:50.017 に答える
9

最良のオプションは、ファイル名を UrlEncode することだと思いました

これは、Content-Disposition-filename などのヘッダー パラメーターに帯域外文字を配置する正しい方法ではなく、バグのために IE でのみ (場合によっては) 機能します。実際には、これはちょっとした永遠の問題です。正しい方法はありません

ダウンロードしたファイル名に特殊文字を入れる必要がある場合、Content-Disposition-filename では確実に行うことができません。代わりに、Content-Disposition-attachment ヘッダーから「filename」パラメーターを省略し、必要なファイル名を URL の末尾部分に残します。ファイル名パラメーターがない場合、ブラウザーは URL パスからそれを取得します。ここで、URL エンコード特殊文字に対処する正しい方法です。

于 2009-10-13T18:09:51.913 に答える
7

このリンクから引用

私はこれに出くわしました。スペースを %20s に変更できる場合、IE7 はそれらを正しく変換します。ただし、Firefox は文字どおり (少なくとも Content-disposition ヘッダーを使用する場合) に受け取るため、IE7 からの要求に対してのみこれを行う必要があります。

アプリで次のことを行いました。(Tomcat ベースのドキュメント リポジトリ)

String userAgent = request.getHeader("User-Agent");
if (userAgent.contains("MSIE 7.0")) {
    filename = filename.replace(" ", "%20");    
}         
response.addHeader("Content-disposition",
    "attachment;filename=\"" + filename + "\"");
于 2009-10-13T17:24:17.020 に答える
2

こんにちは、スペースを含むファイルをダウンロードするときにも同じ種類の問題に直面しました。

最適なスイートと完全な回答を提供するリンクを参照してください。

http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download

理解するために、この問題を解決する方法を ASP.net コードに追加します。

string document = @"C:\Documents and Settings\Gopal.Ampolu\My Documents\Downloads\" + "Disciplinary & Grievance Procedures..doc";
string filename = "Disciplinary & Grievance Procedures..doc";

Response.ContentType = mimeType;
Response.AddHeader("Content-Disposition", @"attachment; filename=""" + HttpUtility.UrlDecode(filename) + @"""");
Response.Flush();

上記から、応答にヘッダーを追加する際に、ファイル名が二重引用符で囲まれていることがわかります。 「ファイル名」が UrlDecode でデコードされていることを確認してください。

于 2011-01-27T10:04:38.577 に答える
1

次の場所で入手可能な Windows ホットフィックス アップデートについてクライアントに知らせることができる場合は、もう 1 つのオプションもあります。

IE の空白の問題に対する Windows 修正プログラムの更新

これはクライアント側であるため、すべてのシナリオに適用できるわけではありませんが、可能であればオプションです。

于 2013-08-01T09:51:39.783 に答える