5

我今天遇到了一个问题,这对我来说很奇怪,但也许对 C# 领域的专家来说不是。

我有一个Download这样的函数(一段代码!)

public void Download (string path){
  HttpContext.Current.Response.ContentType = "application/octet-stream";

  try {
           ....//process a 'filePath' variable using the 'path' parameter

               using ( FileStream sourceFile = new FileStream( filePath, FileMode.Open ) ) {
                 ...

                  HttpContext.Current.Response.AddHeader( "Content-Disposition", "attachment; filename=" + Path.GetFileName( filePath ) );

                  HttpContext.Current.Response.AddHeader( "Content-Length", fileSize.ToString() );

                  HttpContext.Current.Response.BinaryWrite( getContent );
               }
           ...

}

如果提到并存储在path/filePath变量中的文件名包含空格

PR SimpleTest.xls

然后下载框包含文件名PR,没有任何附加内容。

在此处输入图像描述

如果该文件名没有空格(如PR_SimpleTest.xls),则带有标题PR_SimpleTest.xls,我可以这样下载(显示带有他的扩展名的完整文件名)。

如果文件名包含空格,是否有解决方案来解决问题?

4

4 回答 4

13

谷歌搜索 http 标头空间会发现这篇知识库文章,它建议用引号将文件名括起来。例如

HttpContext.Current.Response.AddHeader(
    "Content-Disposition",
    "attachment; filename=\"" + Path.GetFileName( filePath ) + "\"");
于 2012-09-20T06:37:01.337 回答
1

上面的答案使用:

Server.UrlEncode(strFileName)

对我不起作用,它导致文件名是:

“我的+长+文件名.txt”

而使用带引号的文件名的第一个解决方案会产生:

“我的长文件名.txt”

这就是我们想要的。

于 2013-07-29T23:33:32.957 回答
0

我想你使用火狐。看这个链接:下载文件问题

Response.AppendHeader("content-disposition", "attachment; filename=" + Server.UrlEncode(strFileName))

另请查看ASP.NET MVC Uploading and Downloading Files and Writing A Custom File Download Action Result For ASP.NET MVC。在 MVC 中,您可以使用特殊的操作结果。

于 2012-09-20T06:38:03.170 回答
0

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

于 2014-02-07T07:23:52.397 回答