簡體   English   中英

jQuery文件上傳控件錯誤地提交了大文件

[英]jQuery file upload control submits large files erroneously

我為blueimp / jQuery文件上傳控件提供了一個自定義文件上傳實現。 除非我選擇多個文件並且其中一個文件超過最大長度,否則它仍然會嘗試上載超出范圍的文件(即使我不為該特定文件調用data.submit() ,它的效果也很好。

我已經驗證了progress事件不會針對較大的文件(未提交的文件)觸發,但是服務器最終報告了404.13(請求過濾模塊配置為拒絕超出請求內容長度的請求),其他都沒有實際提交的文件將被上傳。

如何更改使用jQuery文件上傳控件上傳有效文件但忽略大文件的方式?

這是我的代碼...它操作一個可被剔除用來顯示UI元素的模型,因此在下面的代碼中您將看不到任何UI操作。

        $('#fileupload').fileupload({
            dataType: 'json',
            url: '/Handlers/UploadHandler.ashx',
            progress: function (e, data) {
                console.log(data.context);
                var progress = parseInt(data.loaded / data.total * 100, 10);
                var file = fileUploadDataModel.files()[data.context];
                file.percentComplete(progress);
            },
            add: function (e, data) {
                $.each(data.files, function (index, file) {
                    var fileModel = new FileModel(file.name, file.size);
                    fileUploadDataModel.files.push(fileModel);
                    data.context = fileUploadDataModel.files().length - 1;

                    if (file.size > opts.maxFileSize) {
                        fileModel.errorMessage('{0} ({1}) exceeds maximum size -- rejected'.format(file.name, friendlyBytes(file.size)));
                        fileModel.percentComplete(0);
                    }
                    else data.submit();
                });
            },
            done: function (e, data) {
                var file = fileUploadDataModel.files()[data.context];
                file.percentComplete(100);
            },
            singleFileUploads: false,
        });

我可以通過標記無效的文件,將它們從data.files數組中刪除,然后提交其余文件來使其工作。 這是固定代碼...

        $('#fileupload').fileupload({
            dataType: 'json',
            url: '/Handlers/UploadHandler.ashx',
            progress: function (e, data) {
                console.log(data.context);
                var progress = parseInt(data.loaded / data.total * 100, 10);
                var file = fileUploadDataModel.files()[data.context];
                file.percentComplete(progress);
            },
            add: function (e, data) {
                var itemsToRemove = [];
                $.each(data.files, function (index, file) {
                    var fileModel = new FileModel(file.name, file.size);
                    fileUploadDataModel.files.push(fileModel);
                    fileModel.sourceIndex = fileUploadDataModel.files().length - 1;
                    file.fileModel = fileModel;

                    if (file.size > opts.maxFileSize) {
                        fileModel.errorMessage('{0} ({1}) exceeds maximum size -- rejected'.format(file.name, friendlyBytes(file.size)));
                        fileModel.percentComplete(0);
                        itemsToRemove.push(index);
                    }
                });

                itemsToRemove = itemsToRemove.reverse();
                for (index in itemsToRemove)
                    data.files.splice(itemsToRemove[index], 1);

                $.each(data.files, function (index, file) {
                    data.context = file.fileModel.sourceIndex;
                    data.submit();
                });
            },
            done: function (e, data) {
                var file = fileUploadDataModel.files()[data.context];
                file.percentComplete(100);
            },
            singleFileUploads: false,
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM