如何有效地将大型文件从数据库发送到浏览器?

时间:2010-06-01 14:37:47

标签: c# asp.net

在我的网络应用程序中,我正在使用文件。有些文件非常大。我使用Response.Write()将文件写入浏览器。这适用于较小的文件,但对于大文件,这可能需要一段时间,并且带宽已被充分利用。

是否可以拆分大型文档并将其逐个发送到浏览器?还有其他方法可以更快地将文档发送到浏览器吗?

我将文档保存为对象的属性。

6 个答案:

答案 0 :(得分:2)

为什么不压缩文件并将其存储在数据库中并解压缩它将解压缩?

根据这些问题你可以做很多事情:

  1. 文件多久更改一次?

  2. 我真的需要DB中的文件吗?

  3. 为什么不将文件路径存储在 DB和磁盘上的文件?

  4. 无论如何,由于您的文件带宽非常高,并且您希望应用程序做出适当的响应,您可能希望使用AJAX异步加载文件。你可以拥有一个WebHandler .ashx。

    以下是一些例子:

    http://www.dotnetcurry.com/ShowArticle.aspx?ID=193&AspxAutoDetectCookieSupport=1

    http://www.viawindowslive.com/Articles/VirtualEarth/InvokingserversidecodeusingAJAX.aspx

答案 1 :(得分:1)

  

我的问题是,是否有可能   拆分大文件并发送   一块一块地浏览器?

这取决于文件类型,但通常没有。如果您要发送excel文件或word doc等内容,接收应用程序将需要所有信息(字节)来完全形成文档。您可以将文档物理地分成多个文档,这样您就可以这样做。

答案 2 :(得分:1)

如果充分使用带宽,那么除了在发送之前压缩文档之外,没有什么可以“加速”。拉上拉链。

根据文件(我知道你说过.mht,但我们在这里谈论内容),你会发现尺寸下降了一些。也许这就足够了,也许不是。

无论哪种方式,这完全取决于您要发送的内容量与可用于发送内容的管道大小。其中一个比另一个更难改变。

答案 3 :(得分:1)

尝试设置IIS的动态压缩。默认情况下,它设置得相当低,但您可以尝试将其设置为更高的压缩级别,并查看它有多大帮助。

答案 4 :(得分:0)

我无法快速使用ASP.NET,但您可以从FileStream缓冲到某种输出流。

答案 5 :(得分:0)

您可以使用Flush方法将当前缓冲的数据发送到客户端(浏览器)。

请注意,这有一些含义,正如here所述。

我自己考虑过使用它,一个项目发送的文档变得相当大,我对将整个数据存储在内存中时非常谨慎。最后,我认为数据不够大,不足以成为一个问题。

可悲的是,MSDN文档对于Flush的含义非常非常模糊,您可能不得不使用Google进行故障排除。