Я пытаюсь создать функциональность для загрузки больших файлов в ASP.NET MVC 5. Вот как выглядит мое действие:
public async Task AddDocument(
Guid documentId,
int chunkIndex,
long totalFileSize,
long currentChunkSize,
int totalChunkCount,
long chunkByteOffset,
long chunkSize,
string fileName,
bool chunked,
Guid? folderId
)
{
var file = Request.Files[0];
if (file == null) return;
await _documentService.SaveDocumentsAsync(new PostedFile
{
File = file,
DocumentId = documentId,
FolderId = folderId,
Name = fileName,
Chunk = chunkIndex,
Chunked = chunked
});
}
Но часто я получаю исключение, как показано ниже:
в System.Collections.ArrayList.get_Item (индекс Int32) в System.Web.HttpFileCollection.Get (индекс Int32) в System.Web.HttpFileCollectionWrapper.get_Item (индекс Int32) в MyDrive.Areas.Admin.Controllers.HomeController.d__9.MoveNext () в E: \ Projects \ MyDrive \ MyDrive \ MyDrive \ Areas \ Admin \ Controllers \ HomeController.cs: строка 0 --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение --- вSystem.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача-задача) в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (задача-задача) в System.Web.Mvc.Async.TeskAsynSec.Async.AsyncControllerActionInvoker. <> C__DisplayClass8_0.b__1 (IAsyncResult asyncResult) в System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult 1.CallEndDelegate(IAsyncResult asyncResult) at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase
1.End () в System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod (IAsyncResult asyncResult) в System.Web.Mvc.Async.AsyncControllerActionIn_0_play_W_W_W_W_W_W_W_WF_0_0_0_0_0Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters. <> C__DisplayClass11_2.b__2 () в System.Web.Mvc.Async.AsyncControllerActionInvoker. <> C__DisplayClass7_eses.Wync.1008 * 1.End () в System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters (IAsyncResult asyncResult) в System.Web.Mvc.Async.AsyncControllerActionInction.Av.AsyncControllerActionInvoker. <> C__DisplayClass3_1.b__1 (IAsyncResult asyncResult)
Я мог видеть это только при развертывании приложения в режиме реального времени.Я думаю, что это терпит неудачу внутри, когда я пытаюсь прочитать из запроса, но я понятия не имею, как я могу решить эту проблему.Я использую dropzone.js для чанков файлов на стороне клиента, как показано ниже:
dropZone.options.params = function(files, xhr, chunk) {
if (chunk) {
return {
documentId: chunk.file.upload.uuid,
chunkIndex: chunk.index,
totalFileSize: chunk.file.size,
currentChunkSize: chunk.dataBlock.data.size,
totalChunkCount: chunk.file.upload.totalChunkCount,
chunkByteOffset: chunk.index * this.options.chunkSize,
chunkSize: this.options.chunkSize,
filename: chunk.file.name,
chunked: true,
folderId: '@(ViewBag.Id)'
};
} else {
return {
documentId: files[0].upload.uuid,
chunkIndex: 0,
totalFileSize: files[0].size,
currentChunkSize: 0,
totalChunkCount: 0,
chunkByteOffset: 0,
chunkSize: 0,
filename: files[0].name,
chunked: true,
folderId: '@(ViewBag.Id)'
};
}
};
Проблема возникает не всегда, это может случиться один раз в 20 загруженных документах, более того, не можетотличить что-то конкретное от ошибочных документов, почему они могут быть причиной этого.Также его сложно отладить, так как я никогда не видел, чтобы это происходило локально, я могу видеть только в своих журналах.
Кто-нибудь знает какие-либо причины, по которым это может произойти?
Пытаться время от времени выяснять,Я нахожу что-нибудь, и в какой-то момент я получил другую ошибку:
Произошла ошибка при связи с удаленным хостом.Код ошибки 0x80070001. Неправильная функция.(Исключение из HRESULT: 0x80070001)
в System.Web.Hosting.IIS7WorkerRequest.RaiseCommunicationError (результат Int32, логический throwOnDisconnect) в System.Web.Hosting.IIS7WorkerRequest.ReadEntityCoreSync (байтовый буфер [], смещение Int32.WebWork.HeWWW)..ReadEntityBody (буфер Byte [], размер Int32) в System.Web.HttpRequest.GetEntireRawContent () в System.Web.HttpRequest.GetMultipartContent () в System.Web.HttpRequest.FillInFormColest () в System.WormFHt.) в System.Web.HttpRequest.get_Form () в System.Web.HttpRequestWrapper.get_Form () в System.Web.Mvc.FormValueProvider..ctor (ControllerContext controllerContext, IUnvalidatedRequestValues недопустимые значения Valve (ValveF)ControllerContext controllerContext) в System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider (ControllerContext controllerContext) в System.Web.Mvc.ControllerBase.get_ValueProvider () в System.Web.Mvc.ControllerActionInvVG.ollerContext controllerContext, ParameterDescriptor parameterDescriptor) при System.Web.Mvc.ControllerActionInvoker.GetParameterValues (ControllerContext controllerContext, ActionDescriptor actionDescriptor) при System.Web.Mvc.Async.AsyncControllerActionInvoker. <> c__DisplayClass3_1.b__0 (AsyncCallback AsyncCallback, Object asyncState) * * * +10261027 *
Не уверен, что эти двое могут быть связаны с одной и той же проблемой: (* 1029 *