Мое программное обеспечение, которое я разработал, загружает файлы с помощью ftp на мой сервер. Я использую ftpwebrequest для загрузки всех файлов. При загрузке файла размером 700 МБ он загружает около 500 МБ, а затем останавливается, он отлично работает при загрузке файлов меньшего размера, файлы меньшего размера загружаются успешно, но он просто хочет правильно работать с большими файлами. У меня есть загрузка, выполненная в фоновом режиме, который сообщает о ходе загрузки на индикатор выполнения на основном клиенте. Когда фоновый рабочий процесс завершается, он выполняет функцию завершенного фонового рабочего процесса. Функция завершения фонового рабочего процесса выполняется, но загрузка никогда не завершается, а индикатор выполнения зависает примерно на 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;
}
}
}