我有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();
}
在新页面中添加了上述代码,并在创建会话后重定向到此页面
答案 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