Fineuploader Chunking - 可以上传几个,但随后失败

时间:2015-09-14 18:29:12

标签: file-upload upload fine-uploader chunks chunking

我现在一直在使用FineUploader的许多版本而且我喜欢你们所做的。这是关于使用jquery包装器的v5.3.0。

我目前正在开发的项目需要对文件进行分块(有些文件大到2GB),而且我已经得到了一些工作,有点儿。我可以上传几个块,就是这个。

我创建的分块过程会创建一个基于qqUUID的文件夹,并将这些块放入此文件夹中。块只按其qqpartindex(0,1,2等)命名,因此可以稍后对它们进行排序并重建。在这一点上,我还没有这么远,所以如果这是错的,请纠正我。在我收到错误之前,我只能保存3个文件(对于20mb的测试文件)。我收到此错误:'XHR返回响应代码0',虽然我不是跨站点脚本(本地运行的应用程序,具有正确的网络资源权限以保存),我总是可以保存3个文件,就是这样。奇怪,我可以得到一些工作,但就是这样。我错过了什么?谢谢你的帮助!

请参阅下面的客户端fineuploader代码,该代码有效:

<script type="text/javascript">
var filesToUpload = 0;
var uploadedFileCounter = 0;
var po = '@Model.PurchaseOrder';
var companyNumber = '@Model.CompanyNumber';

$().ready(function () {
    var fineuploader = $('#files-upload').fineUploader({
        debug: false,
        template: 'qq-template',
        button: $("#uploadButton"),
        request:
        {
            endpoint: '@Url.Action("UploadFile", "Upload")',
            forceMultipart: true,
            customHeaders: { Accept: 'application/json' },
            params: {
                po: (function () { return po; }),
                companyNumber: (function () { return companyNumber; }),
            }
        },
        validation: {
            acceptFiles: ['image/*', +                   
                'audio/mp4a-latm'],
            allowedExtensions: ['jpeg', 'jpg', 'gif', 'png', 'bmp', 'm4a'],
            sizeLimit: 1024 * 1024 * 1024 * 2, // 2 GB
            stopOnFirstInvalidFile: false
        },
        chunking: {
            enabled: true,
            concurrent: {
                enabled: true
            },
            mandatory: true,
            success: {
                endpoint: '@Url.Action("UploadChunksComplete", "Upload")'
            }
            //, expected: false  // allow cross-domain requests
        },
        failedUploadTextDisplay: {
            mode: 'custom'
        },
        multiple: true
    }).on('submitted', function (event, id, filename) {                        
        filesToUpload++;
        $(':input[type=button], :input[type=submit], :input[type=reset]').attr('disabled', 'disabled');            
    }).on('complete', function (event, id, filename, responseJSON) {
        uploadedFileCounter++;
        if (filesToUpload == uploadedFileCounter) {
            $(':input[type=button], :input[type=submit], :input[type=reset]').removeAttr('disabled');
                        }
    }).on('error', function (event, id, name, errorReason, xhr) {
        alert('error: ' + errorReason);            
    });
});

块的服务器端代码看起来像这样,“有效”,我可以进入它:

 [HttpPost]
    public HttpResponseMessage UploadFile(HttpPostedFileWrapper qqfile, string po, string companyNumber)
    {            
        var id = Request["qquuid"];
        var filename = (Request["qqpartindex"]); 

        var x = FileProcessor.Storage.SaveChunk(qqfile, id, filename, Config.Instance.TemporaryChunkDirectory);

        var response = new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
        return response; 
    }     

SaveChunk方法是一个单独项目的一部分,如下所示:

 public static bool SaveChunk(HttpPostedFileWrapper file, string id, string filename, string fileTemporarySavePath)
    {
        if (!VerifyFile(file)) { return false; }

        if (filename == null) { filename = "0"; } // creating index 0 for files that don't actually need chunk

        Common.CreateTempDirectory(fileTemporarySavePath, id);            

        try
        {
            var pathfilename = string.Join("\\", fileTemporarySavePath, id, filename);
            file.SaveAs(pathfilename);

            return true;
        }
        catch (Exception ex)
        {
            var error = ex.Message.ToString();
            return false;
        }
    }

2 个答案:

答案 0 :(得分:1)

我需要添加

{"success":true}

到请求的正文,而不仅仅是在标题中返回OK状态。我的错。在接下来的任务中,谢谢!

答案 1 :(得分:0)

响应代码0通常表示客户端和服务器之间存在网络问题。更具体地说,它表明收到了完全空的响应(没有标题或有效负载)。如果客户端和服务器之间的网络连接断开,或者服务器在某个地方发生故障并且由于未经检查的错误而返回空响应,则可能发生这种情况。