首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用asp.net中的流将文件下载到客户端面临问题

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

Stack Overflow用户
提问于 2014-08-07 11:31:19
回答 1查看 787关注 0票数 0

我试图使用在asp.net客户机上创建(流)并下载一个html文件。

在这里经历过很多相关的帖子,但是没有什么真正的帮助。在花了将近两天的时间后,我偶然发现了一个解决方案。

但是,现在想要了解的原因,为什么它失败较早。

下面是一个故事:

请考虑以下ASP.net代码隐藏处理程序。

代码语言:javascript
复制
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 ={无法计算表达式,因为代码已经优化,或者本机框架位于调用堆栈的顶部。}

更多信息:在进一步研究和创建示例应用程序之后,我发现将下载代码放入下面的代码会导致问题:

代码语言:javascript
复制
if (FileUploadControl.HasFile)
 {
     try
     {
         this.HtmlLogDownload();
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }

如果我移除:

if (FileUploadControl.HasFile)

这也是webform代码:

代码语言:javascript
复制
<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中失败

EN

回答 1

Stack Overflow用户

发布于 2014-09-02 12:03:07

我注意到IE11在检查它时将上传的.png图像返回为:"application/png“,比如: LabelStatus.Text = "Ongeldig:”& FileUploadKleinLogo.PostedFile.ContentType

它曾经是“图像/巴布亚新几内亚”

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25181428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档