我要拔头发了。在php后端使用plupload和分块。在我使用大于100mb的文件之前,分块(或非分块)都很好。
我希望能够使用1Gb之前的文件。继续获取错误,然后重试再次生效,百分比为0%,然后重新启动。也没有飞行前OPTION请求。我甚至使用node-pulploader制作了一个快速的NodeJS后端,它处理块,但也有同样的问题和错误(尽管它确实发送了preflight OPTION)。
如有任何建议,将不胜感激
附加Apache指令
LimitRequestBody 0
PHP设置
file_uploads On
max_file_uploads 20
max_execution_time 3600
memory_limit 640M
post_max_size 600M
upload_max_filesize 500M
js
var uploader = new plupload.Uploader({
runtimes : 'html5,silverlight,html4',
browse_button : 'pickfiles',
url : '<?php echo SITE_URL; ?>admin?sub=upload',
silverlight_xap_url : '<?php echo SITE_URL; ?>lib/Moxie.xap',
multi_selection : false,
max_retries: 10,
filters : {
max_file_size : '1024mb',
chunk_size: '10mb',
},
init: {
FilesAdded: function(up, files) {
plupload.each(files, function(file) {
$('#document-file').html(file.name);
});
},
UploadProgress: function(up, file) {
$('#spinner-progress').html( " " + file.percent + "%" );
},
Error: function(up, err) {
console.warn("Error #" + err.code + ": " + err.message);
},
UploadComplete: function(up, files) {
console.log(files[0]);
}
}
});
uploader.init();
上传器后端
<?php
require_once(LIB.SLASH."PluploadHandler.php");
PluploadHandler::no_cache_headers();
PluploadHandler::cors_headers();
if (!PluploadHandler::handle(array(
'tmp_dir' => UPL_TMP_PATH,
'target_dir' => UPL_TMP_PATH
))) {
die(json_encode(array(
'OK' => 0,
'error' => array(
'code' => PluploadHandler::get_error_code(),
'message' => PluploadHandler::get_error_message()
)
)));
} else {
die(json_encode(array('OK' => 1)));
}
我使用的是一个未更改的plupload处理程序php示例
原来是ngnix配置中的强制设置。client_max_body_size被Plesk默认模板(default/domain/nginxDomainVirtualHost.php)强制设置为128m。在否决此设置时,Plesk返回了一个"重复"错误,最终我得到了这个答案。制作一个自定义模板,更新vhosts。问题解决了!