在ASP.NET 3.5表单中不下载文件扩展名

时间:2015-08-02 04:33:00

标签: c# filestream asp.net-3.5

我真的很困惑,因为在一个网站上,我的代码完美无缺,而在另一个网站上,它并没有。

文件在没有扩展名的情况下下载,但是当我重命名下载的文件以包含扩展名(我将.pdf添加到文件名)时,它会以PDF格式正确打开。我100%确定bytesfilename是正确的,filenamereport.pdf

这是原始代码:

    private void downloadByteStreamAsFile(Byte[] bytes, String fileName)
    {
        System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
        response.Clear();

            //response.Flush(); //comment this or else no file returned
            response.AddHeader("Content-Type", "binary/octet-stream");
            response.AddHeader("Content-Disposition",
                "attachment; filename=" + fileName + "; size=" + bytes.Length.ToString());

            response.BinaryWrite(bytes);
            response.Flush();
            response.End();

        }
    }

我也尝试过:

请帮忙

更新:代码在IE和Chrome中运行良好,只有Firefox有丢失文件扩展名的问题

2 个答案:

答案 0 :(得分:2)

尝试将文件名放在引号中。

response.AddHeader(
    "Content-Disposition",
    "attachment; filename=\"" + fileName + "\"; size=" + bytes.Length.ToString());`

如果可行,请查看这是否仍适用于IE和Chrome以及Safari。如果没有,请添加if语句以有条件地添加引号。

答案 1 :(得分:2)

这让我感觉真实,但事实证明只有PDF文件没有被正确下载,这是因为Directory.EnumerateFiles()被设置了。我可能会以不同的方式重构我的代码,但我最喜欢这样编码,因为这对我来说最容易理解和调试。这是我的固定方法:

Content-Type