0

我正在将文件上传到 SQL Server

  1. 我正在从 UI 层流式传输文件。
  2. 说到业务层,这里是实现。

    HttpWebRequest 请求 = WebRequest.Create(postUrl) as HttpWebRequest;

    流 requestStream = request.GetRequestStream();

    字节[]缓冲区=新字节[8 * 1024];

    国际化;

    而 ((len = fileToUpload.File.Read(buffer, 0, buffer.Length)) >0)

    {

    requestStream.Write(buffer, 0, len);

    requestStream.Flush();

    }

    返回 request.GetResponse() 作为 HttpWebResponse;

我将输入流分块为 8KB 并将其发送到响应流。

我的问题是,如果业务层fileToUpload.File的长度为1 GB,那么它会物理存储在内存中并影响性能吗?

或者我应该以 8KB 的形式将文件从 UI 分块到内存,以便调用业务层函数 8000 次?

4

2 回答 2

1

我在企业文档应用程序管理系统中遇到过类似的问题。我遇到了通过 Web 服务发送大文件(> 5 MB)的问题,因为编码使有效负载膨胀,导致服务器端消耗大量内存。

解决方案是将文件放在网络驱动器/共享/路径上,让服务器轮询并从网络路径中提取文件。当然,在我的情况下,该应用程序是一个 Intranet 应用程序,而不是 Internet

于 2012-09-04T16:35:08.013 回答
1

如果是我,我会进行多次调用,但是如今 8K 非常小,请尝试在兆字节范围内进行多次调用。

单个大型 POST 的问题在于,如果在上传过程中失败,您将不得不再次重新发送整个文件。通过多次调用,您实际上可以确认该块已上传,然后再继续下一个。

于 2012-09-04T16:07:28.667 回答