在asp.net中使用流下载文件到客户端的问题

本文关键字:文件 客户端 问题 下载 net asp | 更新日期: 2023-09-27 18:16:51

我试图在asp.net客户端使用Http响应创建(流)和下载html文件。

我看了很多相关的帖子,但没有什么真正有帮助。花了差不多两天多的时间,我偶然发现了一个解决办法。

然而,现在我想知道原因,为什么它之前失败了。

故事如下:

请考虑以下ASP.net后台代码处理程序。

protected void UploadButton_Click(object sender, EventArgs e)
{
    if (FileUploadControl.HasFile)
    {
        try
        {
            if (FileUploadControl.PostedFile.ContentType == MIMEAssistant.GetMIMEType(".xls"))
            {
                string filename = "log.htm";
                string logContent = "This is a test log..";
                // Some upload processing..
                // Send log file for download
                Response.Clear();
                Response.ContentType = MIMEAssistant.GetMIMEType(filename);
                Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename);
                using (StreamWriter writer = new StreamWriter(Response.OutputStream, Encoding.ASCII))
                {
                    writer.Write(logContent);
                }
                //Response.OutputStream.Write(buf1, 0, buf1.Length);
                HttpContext.Current.ApplicationInstance.CompleteRequest();
                Response.End();
            }
            else
                StatusLabel.Text = "Upload status: Only .xls files are accepted!";
        }
        catch (Exception ex)
        {
            StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
        }
    }
}

没有什么真正帮助让IE下载文件并保存它从卡住。最后,将函数中"//Send log file for download"下的代码从最内层提取到最外层,解决了这个问题。

编辑:即使在消除了下面解释的罪魁祸首之后,再次面对这个问题…

请告诉我为什么?

注意:在上面的代码中,语句Response.End()抛出了一个异常,读取:

[System.Threading。={无法计算表达式,因为代码已优化或本机框架在顶部}

更多信息:在进一步调查并创建一个示例应用程序之后,我发现将下载代码放在以下代码中会导致这个问题:

if (FileUploadControl.HasFile)
 {
     try
     {
         this.HtmlLogDownload();
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }

如果我删除:

如果(FileUploadControl.HasFile)

这也是webform代码:

<form id="form1" runat="server">
    <asp:FileUpload ID="FileUploadControl" runat="server" />
    <asp:Button runat="server" ID="UploadButton" Text="Upload" OnClick="UploadButton_Click" />
    <div>
    </div>
    </form>

编辑:以上工作在Chrome和Mozilla。IE 11失败

在asp.net中使用流下载文件到客户端的问题

我注意到IE11在检查它时返回一个上传的。png图像为:"application/png":LabelStatus。Text = " font - family:宋体;"FileUploadKleinLogo.PostedFile.ContentType

原来是"image/png"

我猜这就是导致IE11问题的原因,而不是FF或Chrome