0

私が設計したソフトウェアは、ftp を使用してサーバーにファイルをアップロードします。すべてのアップロードに ftpwebrequest を使用しています。700mb のファイルをアップロードすると、約 500mbs がアップロードされてから停止します。小さなファイルをアップロードすると正常に動作しますが、小さなファイルは正常にアップロードされますが、大きなファイルでは適切に動作したいだけです。メインクライアントの進行状況バーにアップロードの進行状況を報告するバックグラウンドワーカーでアップロードを行いました。バックグラウンド ワーカーが完了すると、バックグラウンド ワーカーの完了関数が実行されます。バックグラウンド ワーカーの完了関数は実行されますが、アップロードは完了せず、クライアントがアップロードを停止し、アップロードが完了したかのようにバックグラウンド ワーカーの完了関数を実行するように、進行状況バーが約 65% で停止します。ここで何がうまくいかない可能性がありますか?

void UploadFileInBackground_DoWork(object sender,DoWorkEventArgs e)
{
        byte[] data;
        int packetsize = 1024 * 8;

        string Destination = UploadURI + cattext + "/" + ID + ".obj";
        string source = DialogBrower.FileName;
        FtpWebRequest request = (FtpWebRequest)WebRequest.Create(Destination);
        request.Credentials = new NetworkCredential("user", "pass");
        request.Method = WebRequestMethods.Ftp.UploadFile;
        request.UsePassive = true;
        request.UseBinary = true;
        request.KeepAlive = false;
        using (FileStream fs = new FileStream(source, FileMode.Open, FileAccess.Read))
        {
            try
            {
                long filesize = fs.Length;
                long sum = 0;
                int count = 0;
                data = new byte[packetsize];
                Stream reqStream = request.GetRequestStream();
                float totalpackits = filesize / packetsize;
                float weightofpackit = 100 / totalpackits;
                float percentage = 0;
                while (sum < filesize)
                {
                    List<string> statusparms = new List<string>();
                    count = fs.Read(data, 0, packetsize);
                    reqStream.Write(data, 0, count);
                    sum += count;
                    percentage += weightofpackit;
                    int percentagetotal = Convert.ToInt32(Math.Round(percentage));
                    statusparms.Add(sum.ToString());
                    statusparms.Add(filesize.ToString());
                    UploadFileInBackground.ReportProgress(percentagetotal, statusparms);
                }
                reqStream.Close();
                uploadedname = uploadingname;
            }
            finally
            {
                fs.Dispose();
                data = null;
            }
        }
}
4

2 に答える 2

0

これを試してみましょう

request.KeepAlive = false;

request.KeepAlive = true;
于 2013-03-20T07:02:31.620 に答える
0

代わりにこれを試してください:

request.UseBinary = false;
于 2013-03-05T09:28:09.653 に答える