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

时间:2014-08-07 11:31:20

标签: c# asp.net download

我正在尝试使用Http Response在asp.net上创建(流)并下载客户端上的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下载文件并将其保存起来。 最后,在" //发送日志文件下提取代码以供下载"从函数的最里面到最外层解决了这个问题。

编辑:即使在删除下面解释的罪犯后再次面对这个问题..

请帮我理解原因?

注意:在上面的代码中,语句Response.End()引发了一个读取:

的异常
  

[System.Threading.ThreadAbortException] = {无法评估   表达式,因为代码已优化或本机框架位于顶部   调用堆栈。}

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

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

如果我删除它可以正常工作:

  

if(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中失败

1 个答案:

答案 0 :(得分:0)

我注意到IE11将上传的.png图片返回为:&#34; application / png&#34;当检查它时: LabelStatus.Text =&#34; Ongeldig afbeeldingstype:&#34; &安培; FileUploadKleinLogo.PostedFile.ContentType

过去是&#34; image / png&#34;

我的猜测是,在IE11中导致问题的是什么,而不是FF或Chrome