当前位置: 首页 > 面试题库 >

在ASP.NET C#应用程序的浏览器之间丢失的文件扩展名

裴心水
2023-03-14
问题内容

我对你们中的一些人有技术问题。

基本上,我主要在firefox中测试过我的应用程序,我在应用程序中具有下载功能,用户可以从其中下载SQL
Server数据库中的文件。问题是,当我在Internet
Explorer中下载文件时,除Microsoft文件(如单词,访问权限等)外,每个文件都将失去其扩展名。firefox中除位图外没有任何问题…

这是我的代码,谢谢

    //Download attachment file
    protected void AttachmentDLBut_Click(object sender, EventArgs e)
    {
        //set the ID for the selected row
        var ID = Request.QueryString["Id"];
        using (SqlConnection conn = new SqlConnection("******"))
        {
            string sql = "SELECT FileType, Filename, Description FROM NetworkEquipment WHERE NetworkEquipmentID = '" + ID + "'";

            using (SqlCommand cmd = new SqlCommand(sql, conn))
            {
                //cmd.Parameters.AddWithValue("@ID", AttachmentDDL.SelectedItem.Value);
                conn.Open();

                SqlDataReader dr = cmd.ExecuteReader();

                try
                {
                    //if there is an attachment... download it
                    if (dr.Read())
                    {
                        Response.Clear();
                        Response.ContentType = dr["FileType"].ToString();
                        Response.AddHeader("Content-Disposition", "attachment;filename=\"" + dr["Filename"].ToString());
                        Response.BinaryWrite((byte[])dr["Description"]);
                        Response.End();

                        conn.Close();
                    }
                }
                catch (SqlException sqlex) { MessageBox.Show("Sorry, an unexpected error has occurred while downloading this file. Error: " + sqlex); }
                catch (Exception ex) { MessageBox.Show("Sorry, an unexpected error has occurred while downloading this file. Error: " + ex); }

                //else nothing happens
            }
        }
    }

问题答案:

使用F12开发人员工具或FireBug或类似工具查看服务器实际发送的内容。在这种情况下,它将类似于:

Content-Disposition: attachment;filename="filename.ext

默认情况下,服务器也可能发送此消息或类似内容:

Content-Type: text/html

首先,您需要关闭文件名后的引号。还建议在分号后留一个空格。您还需要清理文件名,以确保它不包含混乱或非法字符。至少您需要去除双引号或将其引号。

其次,您需要添加一个Content-Type标头。作弊要定

Content-Type: application/octet-stream

这将导致浏览器根据文件扩展名进行猜测。



 类似资料:
  • 每个桌面浏览器都有一套开发工具,开箱即用,您可以将他们添加到您的浏览器的扩展或插件。 以下是两个具有一些实用功能的Chrome扩展程序,可帮助您调试设计。 Emmet Re:View Emmet Re:View是一个工具,它可以让你轻松查看您的网站在每个媒体查询(media queries)中的样子,并同步所有页面的滚动。 你可以在他们的网站上看到它的演示。 Download on the Chr

  • 我正在做一个项目,该项目将有许多JavaFX应用程序,这些应用程序具有相似但又足够不同的功能,因此我创建了一个抽象基类来扩展Application以处理常见的功能并指示它们需要做什么,还创建了一系列具体的类来扩展这些功能。然而,当我试图跑的时候,我得到 应用程序构造函数java.lang.Reflect.InvocationTargetException位于java.base/jdk.intern

  • jsp或任何.jsp文件(也包括.html文件),当我使用string type方法作为index方法时,我无法在浏览器中显示文件名,而是在浏览器中显示为字符串。但是,如果我使用ModelAndView类,那么它可以正常工作。如何使用字符串类型方法显示页面?我已经看了很多例子,并访问了很多站点,包括StackOverflow.com。Bell所有相关文件: > 控制器类 pom.xml 输出:

  • 我有代理反应应用程序的问题。目标:我有两个反应应用,第一个应用在localhost:3000,第二个在localhost:3001。我想要什么?= 然后url将从localhost:3000更改为localhost:3000/app2,第二个react应用程序将显示url localhost:3001中包含的内容。 我导入了http代理中间件库,并创建了src方向文件setupProxy。js和内

  • 我丢失了用于为我的应用程序签名的原始文件。 我的应用程序已启用Google Play应用程序签名。 如果我联系谷歌支持,是否可以重置密钥,以便我可以继续上传到此软件包?我希望我能做到这一点,因为应用程序签名已启用,但我不确定我的假设是否正确。

  • 问题内容: 我正在运行基本的ELK堆栈。在vm中运行的所有三个组件。Logstash正在侦听TCP 9140,以获取其输入通过NxLog代理从大约30个Windows Server 2008s和30个Windows Server 2003事件(evts)中接收的信息,并将其输出到elasticsearch。 这个已经运行了好几个星期了。我可以看到ElasticSearch每天都在创建索引,并且可以