У меня есть функция загрузки файла. Я загружаю файл кусками, он пытается загрузить чанк, при неудачном входе пытается войти снова и затем пытается загрузить. На некоторых файлах он работает нормально, а на некоторых нет (нет согласованности в отношении того, какие файлы заканчиваются ошибкой, а какие загружаются - один и тот же файл один раз работает, а другой нет).
ошибка, которую я получаю в функции загрузки файла:
System.ObjectDisposedException: Невозможно получить доступ к удаленному объекту. Имя объекта: 'System. Net .Http.MultipartFormDataContent'. в System. Net .Http.HttpContent.CheckDisposed () в System. Net .Http.HttpContent.CopyToAsyn c (потоковый поток, контекст TransportContext) в System. Net .Http.HttpClientHandler.GetRequestStreamCallback ( ar) --- Конец трассировки стека от предыдущего местоположения, где было сгенерировано исключение --- в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Задача задачи) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача задачи) в системе. Runtime.CompilerServices.TaskAwaiter`1.GetResult () в
Функция:
private bool uploadFile(string path, ref string fileName)
{
var chunkSize = 1024 * 1024;
var identifier = Guid.NewGuid();
using (var fileStream = File.OpenRead(path))
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
var count = 1;
var totalChunkCount = Math.Ceiling((double)fileStream.Length / chunkSize);
HttpResponseMessage response = null;
while (fileStream.Position < fileStream.Length)
{
var readCount = fileStream.Length - fileStream.Position > chunkSize
? chunkSize
: (int)(fileStream.Length - fileStream.Position);
var buffer = new byte[readCount];
fileStream.Read(buffer, 0, readCount);
using (var chunkedStream = new MemoryStream(buffer))
{
using (var content = new MultipartFormDataContent())
{
content.Add(new StreamContent(chunkedStream),
Path.GetFileNameWithoutExtension(path), Path.GetFileName(path));
content.Add(new StringContent(count.ToString()), "ChunkNumber");
content.Add(new StringContent(totalChunkCount.ToString()), "TotalChunks");
content.Add(new StringContent(identifier), "Identifier");
content.Add(new StringContent(Path.GetFileName(path)), "Filename");
response = client.PostAsync(m_uploadURL, content).GetAwaiter().GetResult();
if (!response.IsSuccessStatusCode && response.StatusCode == HttpStatusCode.Unauthorized)
{
login();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken);
response = client.PostAsync(m_uploadURL, content).GetAwaiter().GetResult();
}
}
}
ShowPercentProgress("Upload of " + path, count, Convert.ToInt32(totalChunkCount));
count++;
}
if (response != null)
{
var contents = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();
var json = JObject.Parse(contents);
var uploadResponse = json.ToObject<UploadResponse>();
if (!uploadResponse.status.isSuccess)
{
Logger.Log("Error: " + uploadResponse.status.statusDescription);
return false;
}
if (uploadResponse.data.allChunksUploaded)
{
serverFileName = uploadResponse.data.fileName;
return true;
}
}
}
return false;
}
Не удалось найти ответ по net