FileStream 下载拉取页面 HTML

FileStream download pulls page HTML

我正在尝试设置 FileStream 以在我的应用程序中工作。我很确定我遇到的问题不在我的上传代码中。如果我查看我的测试文件的属性,它显示为 46 字节。当我通过下载命令查看调试步骤时,它抓取了 46 字节的文件长度。

在浏览器中实际下载文件时的最后一步,文件中添加了一堆数据,特别是页面本身的整个 HTML。我不知道为什么会这样。

protected void gvFilestream_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "GetFile")
        {

            SqlConnection objSqlCon = new SqlConnection(CS);
            objSqlCon.Open();
            SqlTransaction objSqlTran = objSqlCon.BeginTransaction();

            SqlCommand objSqlCmd = new SqlCommand("FileGet", objSqlCon, objSqlTran);
            objSqlCmd.CommandType = CommandType.StoredProcedure;

            SqlParameter objSqlParam1 = new SqlParameter("@ID", SqlDbType.VarChar);
            objSqlParam1.Value = e.CommandArgument;

            objSqlCmd.Parameters.Add(objSqlParam1);
            string path = string.Empty;
            string fileType = string.Empty;

            using (SqlDataReader sdr = objSqlCmd.ExecuteReader())
            {
                while (sdr.Read())
                {
                    path = sdr[0].ToString();
                    fileType = sdr[1].ToString();
                }

            }

            objSqlCmd = new SqlCommand("SELECT GET_FILESTREAM_TRANSACTION_CONTEXT()", objSqlCon, objSqlTran);

            byte[] objContext = (byte[])objSqlCmd.ExecuteScalar();


            SqlFileStream objSqlFileStream = new SqlFileStream(path, objContext, FileAccess.Read);

            byte[] buffer = new byte[(int)objSqlFileStream.Length];
            objSqlFileStream.Read(buffer, 0, buffer.Length);
            objSqlFileStream.Close();

            objSqlTran.Commit();
            Response.AddHeader("Content-disposition", "attachment; filename=" + Path.GetFileName(path) + fileType);
            // Here you need to manage the download file stuff according to your need
            Response.ContentType = "application/octet-stream";

            Response.BinaryWrite(buffer);
        }
    }

这是我下载文件的代码隐藏方法。下面是下载的文本文件顶部的片段。我没有把整个东西都放进去,因为它看起来毫无意义。原文档只包含"This document is a test document, for testing."

This document is a test document, for testing.
<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
    View
</title>

我正在使用我在 Internet 上找到的指南来设置这个 FileStream 东西,但它并没有真正解释每个部分在做什么,所以我不知道我的方法哪里出了问题。好像在评论区,我需要根据自己的需要定制。

有什么建议吗?

在将二进制内容写入输出之前调用 Response.Clear() 清除响应。

为了防止进一步写入输出,您应该在那之后立即停止请求执行:

Response.Clear();
Response.BinaryWrite(buffer);
Response.End();