如何在c#中以可下载的形式从服务器到客户端传输大小高达(1gb)的pdf文件



我在服务器上有一个pdf文件(可能高达几gb)。我想把它发送给客户端,这样客户端可以在他的本地机器上下载。我想我需要在c#中使用流类来从web服务器获取数据。但我不确定流类是否对它可以流的文件大小有限制?

还有,一旦我有了数据流,我如何将其发送到客户端,以便他可以在他的本地机器上下载?我们可以在c#中做到吗?或者换句话说,我如何将此数据流转换为可下载的文件?

需要注意的是,如果你使用web服务器来发送文件,你可能不需要为它编写任何代码,web服务器已经内置了这个功能。

Stream类支持缓冲,这是您需要使用的。下面是一个简单的例子:

byte[] buffer = new byte[1024]; // 1 KB buffer
using(FileStream fs = new FileStream("file.pdf"))
using(MemoryStream ms = new MemoryStream()) // output the stream into memory, this is what you'll want to change for your purposes
{
    int read;
    while((read = fs.Read(buffer, 0, buffer.Length)) > 0)
    {
        ms.Write(buffer, 0, read);
    }
}

这个答案主要是关于客户端代码从web下载文件。

如果你需要服务器端代码- ASP。. Net MVC已经有了完善的方法——Controller.File.

Stream类对数据的大小没有限制(并且存在像NetworkStream这样的无限流)。单个实现可能会根据内部细节对大小进行限制(例如MemoryStream受单个托管内存块的最大大小限制-略低于2GB)

2GB以下的文件根本不需要任何特殊的编码,更大的文件需要稍微小心,因为整数溢出和单个托管内存块的最大大小限制(例如,如果试图将4GB保存到MemoryStream中)。

在大多数情况下,现有的类(如FileStream)和方法(如Stream.CopyTo)应该足以处理大文件。

还检查现有的类如WebClient.DownloadFile是否对你足够:

WebClient myWebClient = new WebClient();
myStringWebResource = remoteUri + fileName;
myWebClient.DownloadFile(myStringWebResource, fileName);

相关内容

  • 没有找到相关文章