在 C# MVC 中,'FileStream.ReadTimeout' 抛出了一个 'System.InvalidOperationException' 类型的异常。

3

我正在尝试向公共IP发送文件。当文件大小较小时可以正常工作,但我想发送的.BAK文件非常大。在尝试发送小于20-30 MB的.BAK文件时可以正常工作,但是超过30MB就不行了。
我已经尝试:- 在Web.config中

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="2147483648" />
    </requestFiltering>
  </security>
</system.webServer>
 //this also tried
<system.web>
<httpRuntime maxRequestLength="2097152" />
<compilation>
  <assemblies>
    <add assembly="System.Web.Mvc, Version=5.2.7.0, Culture=neutral, PublicKeyToken=31BF3856AD324E38" />
  </assemblies>
</compilation>

</system.web>

- 我尝试在IIS中增加最大上传文件大小

           string publicAPI = "https://localhost:44350/Upload/";
            var directory = new DirectoryInfo("D:\\Database");
            var fileName = (from f in directory.GetFiles()
                          orderby f.LastWriteTime descending
                          select f).First();

            Stream fileStream = System.IO.File.OpenRead(fileName.FullName); // here is error:ReadTimeout = 'fileStream.ReadTimeout' threw an exception of type 'System.InvalidOperationException'
            try
            {
                using (var client = new HttpClient())
                {
                    using (var formData = new MultipartFormDataContent())
                    {
                        formData.Add(new StreamContent(fileStream), "Mytic", fileName.Name);
                        var response = client.PostAsync(publicAPI, formData).Result;
                        if (response.IsSuccessStatusCode )
                        {}
                        else
                        {}
                    }
                }
            }

我在使用fileStream的时候遇到了错误(错误: ReadTimeout = 'fileStream.ReadTimeout' 抛出了一个 'System.InvalidOperationException' 异常) 。我该如何读取大文件(.BAK)?

1个回答

0

已经对您的代码进行了一些更改。如果这个可以工作,请告诉我。

  string publicAPI = "https://localhost:44350/Upload/";
        var directory = new DirectoryInfo("D:\\Database");
        var fileName = (from f in directory.GetFiles()
                        orderby f.LastWriteTime descending
                        select f).First();

        Stream fileStream = System.IO.File.OpenRead(fileName.FullName); // here is error:ReadTimeout = 'fileStream.ReadTimeout' threw an exception of type 'System.InvalidOperationException'
        try
        {
            HttpClientHandler handler = new HttpClientHandler();
            handler.MaxRequestContentBufferSize = 50000*1024;

            using (var client = new HttpClient(handler))
            {

                using (var formData = new MultipartFormDataContent())
                {
                    formData.Add(new StreamContent(fileStream), "Mytic", fileName.Name);
                    var response = client.PostAsync(publicAPI, formData).Result;
                    if (response.IsSuccessStatusCode)
                    { }
                    else
                    { }
                }
            }
        }
        catch (Exception ex)
        { 
        }

在接收端,我已将请求长度增加到700 MB。我测试过可以上传大文件。以下是我的Web配置。尝试按照下面所示增加请求长度。

enter image description here


@saifiqbal,无法工作。文件流fileStream = System.IO.File.OpenRead(fileName.FullName),我在这里遇到了错误。 - Dream OC
你必须发布完整的错误信息,这样每个人才能理解你的问题。 - saif iqbal
这只是一个错误:ReadTimeout = 'fileStream.ReadTimeout' 引发了类型为 'System.InvalidOperationException' 的异常。 - Dream OC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接