从C#下载存储在SQL数据库中的文件

时间:2016-09-09 11:07:48

标签: c# sql

我有SQL数据库,我存储用户上传的文件。

我创建了linkbutton来下载文件。点击该链接按钮,我在代码下面调用。不幸的是它不起作用。不是抛出任何错误的事件。

我已将文件名 contentType 字节存储为我的SQL表中的3列

Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = contentType;
Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();

可能是什么问题?或任何其他方式来实现这一目标?

更新

使用相同的代码和基于答案标记为正确的更改,我做了更改并且工作正常。在此处提供工作代码以供将来参考其他用户:

    protected void Page_Load(object sender, EventArgs e)
    {
            DataTable dt = Session["fileAttachment"] as DataTable;
            string fileName = Convert.ToString(dt.Rows[0]["filename"]);
            string contentType = Convert.ToString(dt.Rows[0]["contentType"]);
            byte[] bytes = Convert.FromBase64String(Convert.ToString(dt.Rows[0]["bytearr"]));
            Response.Clear();
            Response.ClearHeaders();
            Response.Buffer = true;
            Response.Charset = "";
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.ContentType = contentType;
            Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);
            Response.BinaryWrite(bytes); //
            //Response.BufferOutput = true;
            //Response.OutputStream.Write(bytes, 0, bytes.Length);
            Response.Flush();
            Response.End();
    }

在新页面中添加了上述代码,并在创建会话后重定向到此页面

2 个答案:

答案 0 :(得分:1)

在我的应用中,此代码正常运行。我在新页面中使用它。您需要知道文件的扩展名是什么。

import sys

def exit():
    # clean up resources
    sys.exit()    # defaults to status 0 == success

答案 1 :(得分:0)

我目前正在处理大型文件和MsSQL数据库。将整个文件存储为字节数组非常耗时,这会耗尽您的数据库。

考虑使用SqlFileStream https://msdn.microsoft.com/de-de/library/gg471497.aspx 你必须做一些配置,但它可以让你在任何时间内存储任何大小的文件。

这将为您提供一种直接从数据库流式传输文件的方法,而不是在asp服务器中读取整个文件,然后将其发送给客户端。

Microsoft技术信函:要blob还是不要blob: https://arxiv.org/ftp/cs/papers/0701/0701168.pdf