Fineuploader Chunking - 可以上传多个,但随后失败
Fineuploader Chunking - can upload several, but then fails
我现在已经在很多版本中使用 FineUploader,我喜欢你们所做的一切。这是关于使用 jquery 包装器的 v5.3.0。
我目前正在处理的项目需要对文件进行分块(有些文件大到 2GB),我已经让分块工作了,有点。我可以上传几个块,仅此而已。
我创建的分块过程根据 qqUUID 创建一个文件夹,并将分块放入该文件夹中。这些块仅由它们的 qqpartindex(0、1、2 等)命名,因此可以稍后对其进行排序和重建。在这一点上我还没有做到这一点,所以如果这是错误的,请纠正我。在出现错误之前我只能保存 3 个文件(对于 20mb 的测试文件)。我收到此错误:'XHR returned a response code 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);
});
});
块的服务器端代码如下所示,'works' 我可以进入其中:
[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;
}
}
响应代码 0 通常表示客户端和服务器之间存在一些网络问题。更具体地说,它可能表示收到了一个完全空的响应(没有 headers 或有效负载)。如果客户端和服务器之间的网络连接断开,或者如果服务器在某个地方出现故障并由于未经检查的错误而返回空响应,则可能会发生这种情况。
我需要添加
{"success":true}
到请求的body,而不仅仅是returnheader中的OK状态。我的错。进入下一个任务,谢谢!
我现在已经在很多版本中使用 FineUploader,我喜欢你们所做的一切。这是关于使用 jquery 包装器的 v5.3.0。
我目前正在处理的项目需要对文件进行分块(有些文件大到 2GB),我已经让分块工作了,有点。我可以上传几个块,仅此而已。
我创建的分块过程根据 qqUUID 创建一个文件夹,并将分块放入该文件夹中。这些块仅由它们的 qqpartindex(0、1、2 等)命名,因此可以稍后对其进行排序和重建。在这一点上我还没有做到这一点,所以如果这是错误的,请纠正我。在出现错误之前我只能保存 3 个文件(对于 20mb 的测试文件)。我收到此错误:'XHR returned a response code 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);
});
});
块的服务器端代码如下所示,'works' 我可以进入其中:
[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;
}
}
响应代码 0 通常表示客户端和服务器之间存在一些网络问题。更具体地说,它可能表示收到了一个完全空的响应(没有 headers 或有效负载)。如果客户端和服务器之间的网络连接断开,或者如果服务器在某个地方出现故障并由于未经检查的错误而返回空响应,则可能会发生这种情况。
我需要添加
{"success":true}
到请求的body,而不仅仅是returnheader中的OK状态。我的错。进入下一个任务,谢谢!