2008-11-17 116 views
0

我在数据库列中存储了一个txt文件作为字符串。现在我的一个aspx页面上有一个链接...我想在用户点击这个链接时打开一个txt文件。我如何从数据库中读取文件。我知道如何使用streamreader来存储磁盘上的文件。从数据库中读取文件

谢谢

回答

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类型应该是,而不是文本/平原为浏览器可能会尝试打开该文件,而不是将其保存为一个附件。

+0

Nope..I要打开的文件作为附件(与储蓄的选择,节省等)。对不起,如果我的问题不清楚。 谢谢 – Mithil 2008-11-17 21:44:14

0

为什么要将文件存储在数据库列中?数据库对于你真正需要查询的东西来说更好......对于诸如'给我所有过去30天的给定链接'或'用布艺室内装饰获得所有蓝色汽车'这样的查询是有用的。

OS文件系统可以更好地处理文件。如果您必须有关于该文件的记录,则可以放入一条记录,并将该文件的路径放入字符串列中。

+0

这是项目的要求...我没有发言权。 谢谢 – Mithil 2008-11-17 21:45:08

2

如果你真的必须将文件存储在数据库中(我完全同意Will的说法,你不应该这么做),你可能想考虑实现一个单独的下载页面(例如getfile.aspx),它是负责根据ID从数据库中获取字符串,或许(getfile.aspx?fileId = 12345),设置适当的HTTP头并将内容直接输出到浏览器。通过设置内容类型标题,您应该能够强制浏览器将aspx页面看作txt文件或任何其他可识别的文件格式。

我强烈建议尝试将项目范围更改为不将文件存储在数据库中,但由于此方法可能会非常快速地变得非常混乱。

+0

是的,多数民众赞成我在做什么,但问题是在实际的代码。我有一个文件流 oFileStream = System.IO.File.Open(sFullFilePath,IO.FileMode.Open,System.IO.FileAccess。阅读) 但我不能使用这个,因为我没有文件路径,因为我有一个字符串中的内容“sFileToBeProcessed” – Mithil 2008-11-17 21:59:24