2

C#ASP.Net Webサイトで、使用しているクライアントにファイルを転送するには

String file_path = Server.MapPath("~/files/"+file_name); 
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + file_Name);
HttpContext.Current.Response.TransmitFile(file_path);        
HttpContext.Current.Response.End();

完全に機能していますが、ファイル名にスペースが含まれている場合、ダウンロードされたファイルの名前は最初の単語までしかありません。例:私のファイル名が"This is demo.txt"の場合、ダウンロードされたファイル名は"This"拡張子なしになります。したがって、それをダウンロードするユーザーはそのタイプを識別できません。
スペースを含むファイル名でこれが発生しないようにするにはどうすればよいですか?

使ってみました

String file_path = "'"+Server.MapPath("~/files/"+file_name)+"'";

しかし、それはうまくいきませんでした。

また、サーバー上に存在するファイル名に存在するすべてのスペースを(「_」または「-」に)置き換えたり、削除したりすることもできません。

4

1 に答える 1

9

ファイル名は引用符で囲む必要があります。

HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=\"" + file_Name + "\"");

また、VS2015以降を使用している場合は、文字列補間を使用して少し整理することができます。

HttpContext.Current.Response.AddHeader("Content-Disposition", $"attachment;filename=\"{file_Name}\"");

また、ヘッダーのファイル名はファイルの名前と同じである必要はありません。ヘッダーのファイル名は、ユーザーへの提案にすぎません。

詳細については、RFC 6266「ハイパーテキスト転送プロトコル(HTTP)でのContent-Dispositionヘッダーフィールドの使用」を参照してください。特に、ファイル名で問題が発生する可能性のある文字については、こちらを参照してください。

于 2012-09-14T12:11:18.890 に答える