在C#中下载文件的内容配置

时间:2018-08-27 08:01:56

标签: c# download header ascii

我想下载具有日语文件名的文件而不更改其原创性。 这是我用来下载文件的代码:

Response.ContentType = "application/octet-stream";
var contentDisposition = "attachment; filename*=UTF-8''" + Uri.EscapeDataString("filename");
Response.Headers["Content-Disposition"] = contentDisposition;

return await _s3.DownloadFileAsStream(S3Storage.FilesBucket, filename); 

这将返回带有文件名的文件:

  

High Siera.pdf-> High Siera.pdf(正确)

     

2018年国内カレンダー年-> 2018年%E3%80%80国内カレンダー年(错误)

日语文件名被转义并被替换。

2 个答案:

答案 0 :(得分:0)

您将获得在HTTP通信过程中转换的编码值。您可以在使用前解码值。我希望这可以帮助你。 (System.Web软件包中的HttpUtility)

string decodedFileName = HttpUtility.UrlDecode(filename);

return await _s3.DownloadFileAsStream(S3Storage.FilesBucket, decodedFileName); 

答案 1 :(得分:0)

根据RFC 2045-

  

当前[RFC 2045]语法限制参数值(因此,   Content-Disposition文件名)为 US-ASCII 。我们认识到伟大   希望在文件名中允许使用任意字符集,但是   超出本文档的范围以定义必要的   机制。

您在使用UTF8进行转义方面做得很好。在这种情况下,应该在下载的文件中转义字符。

有关更多信息,请查看以下讨论-

How to encode the filename parameter of Content-Disposition header in HTTP?

在这里-

How to display a non-ascii filename in the file download box in browsers?