0

FTP サーバーにファイルをロードしようとしています。これが私のコードです:

                // Create the request.
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(appSettingsFTP.ftpUrl + @"/" + filename);
                request.Method = WebRequestMethods.Ftp.UploadFile;
                request.Timeout = 6000000; //set to 100 minutes

                // Add the login credentials.
                request.Credentials = new NetworkCredential(appSettingsFTP.ftpLogin, appSettingsFTP.ftpPassword);

                // Grab the file contents.
                StreamReader sourceStream = new StreamReader(appSettingsFTP.uploadFileDirectory + filename);
                byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
                sourceStream.Close();
                request.ContentLength = fileContents.Length;

                // Copy the file contents to the outgoing stream.
                Stream requestStream = request.GetRequestStream();
                requestStream.Write(fileContents, 0, fileContents.Length);
                requestStream.Close();

                FtpWebResponse response = (FtpWebResponse)request.GetResponse();
                LoggerFTP.Log(filename.ToString() + " " + "Upload Complete, Status: " + response.StatusCode, false);

ファイルの 1 つ (8 つある) を除いて、すべて正常に動作しているようです。動作しないファイルは最大で、約 160,000 kB です。私が得ているエラーはこれです:

                System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
                     at System.String.ToCharArray()
                     at System.Text.Encoding.GetBytes(String s)
                     at CPMainSpringAPIExportsSC.UploadFTP.FTPUploadMethod(String viewname, String filename)

コードの次の行でエラーが発生していると確信しています。

byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());

一度にすべてではなく、ループでスチームリーダーから読み取る方法はありますか? これで問題は解決すると思いますが、どうすればよいかわかりません。

また、+= 演算子を使用して何かを実行しようとしましたが、byte[] が静的であることに気付きました。

他のアイデアはありますか?助けてくれてありがとう。

4

3 に答える 3

0

ファイルアップロードコントロールを備えたWebアプリケーションだと思います

次に、これで問題が解決すると思います。これを web.config に追加します。

<configuration>
  <system.web>
    <httpRuntime maxRequestLength="xxx" />
  </system.web>
</configuration>

「xxx」は KB

于 2013-04-26T13:28:07.013 に答える
0

同様の回答がここに投稿されました。基本的に、ファイルをチャンクで読み取り、サーバーにアップロードする必要があります。

于 2013-04-27T01:47:25.680 に答える