Индекс был вне диапазона.Должен быть неотрицательным и меньшим, чем размер коллекции.Имя параметра: индекс при использовании Request.Files - PullRequest
0 голосов
/ 03 марта 2019

Я пытаюсь создать функциональность для загрузки больших файлов в 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 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...