我已将txt文件作为字符串存储在数据库列中。现在在我的一个aspx页面上,我有一个链接...我想在用户点击此链接时打开一个txt文件。我如何从数据库中读取文件。我知道如何使用streamreader为存储在磁盘上的文件执行此操作。
由于
答案 0 :(得分:2)
如果你真的必须将文件存储在数据库中(我完全同意Will,你不应该),你可能想要实现一个单独的下载页面(例如getfile.aspx),它负责为了从数据库中获取基于id的字符串,可能(getfile.aspx?fileId = 12345),设置适当的HTTP标头并将内容直接输出到浏览器。通过设置内容类型标题,您应该能够强制浏览器将aspx页面视为txt文件或任何其他可识别的文件格式。
我强烈建议尝试将项目范围更改为不在DB中存储文件,因为这种方法很快就会变得非常混乱。
答案 1 :(得分:1)
这需要做一些澄清。
如果文件作为字符串存储在数据库中,您只需将其读入字符串并将其显示在页面中。
public void Page_Load(object sender, EventArgs e)
var text = (from x in dataContext.MyTextTable where x.Id == someId select x.FileText).FirstOrDefault();
this.textBox.Text = text;
}
好的,这就是你需要做的。伪代码如下:
从数据库加载字符串
对字符串使用ToCharArray()方法以获取字符数组
使用HttpResponse对象将char数组写入()响应流
这是一些几乎可编译的代码:
public void Page_Load(object sender, EventArgs e)
{
var text = Repository.GetTextFile(this.FileTextBox.Text).ToCharArray();
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" & this.FileTextBox.Text);
Response.AddHeader("Content-Length", text.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.Write(text, 0, text.length);
Response.End();
}
我认为mime类型应该是而不是text / plain,因为浏览器可能会尝试打开文件而不是将其另存为附件。
答案 2 :(得分:1)
它涵盖了数据库和类型blob ......应该很有用。
http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/uploading-files-to-mysql-database.aspx
答案 3 :(得分:0)
为什么要将文件存储在数据库列中?数据库更适合您真正需要查询的内容...它对于“给我过去30天内所有给定链接”或“获得所有带有室内装饰的蓝色汽车”等查询非常有用。
操作系统文件系统可以更好地处理文件。如果你必须有关于该文件的记录,你可以放一条记录,而是把文件的路径放到字符串列中。