我使用不依赖 jQuery 的 FineUploader 和 PHP 示例错误报告脚本来上传文件。分块和恢复已打开。所有处理均来自 PHP 示例脚本,未经任何修改。
在最大 ~90mb 的测试文件上成功运行,但是当尝试上传 329mb 的文件时,上传开始,但随后中止,并出现“文件为空”错误。
我可以从我的 block 文件夹中看到大约 77mb 的文件在错误发生之前已上传。尝试恢复不起作用,并且不会增加 block 目录的大小。
环境:LAMP、Centos 6.3。
post_max_size
和 upload_max_filesize
在 php.ini 中均设置为 2048M。
有任何迹象表明造成这种情况的原因吗?很高兴提供更多信息。
上传者代码:
<div id="failed-fine-uploader"></div>
<script>
function createUploader() {
var faileduploader = new qq.FineUploader({
element: document.getElementById('failed-fine-uploader'),
request: {
endpoint: 'example.php'
},
chunking: {
enabled: true
},
resume: {
enabled: true
},
failedUploadTextDisplay: {
mode: 'custom',
maxChars: 40,
responseProperty: 'error',
enableTooltip: true
}
});
}
window.onload = createUploader;
</script>
编辑:控制台信息:
[17:31:09.314] [FineUploader] Processing 1 files or inputs...
[17:31:09.315] [FineUploader] Resuming CentOS-6.3-x86_64-minimal.iso at partition index 40
[17:31:09.316] [FineUploader] Sending chunked upload request for item 4: bytes 80000001-82000000 of 346011648
[17:31:09.504] [FineUploader] xhr - server response received for 4
[17:31:09.504] [FineUploader] responseText = {"error":"File is empty.","uploadName":null}
最佳答案
如果您遇到这个(相当无用的)错误,可能是由多种原因造成的,所以我建议您全部检查一下。这个答案是在似乎发生此错误的“非常大”文件的上下文中。
在您的 php.ini 中,检查并确保:
post_max_size
设置得足够高以覆盖文件大小(最大 2G)
upload_max_filesize
设置得足够高以覆盖文件大小(最大 2G)
post_max_size
大于 upload_max_filesize
(根据 http://www.php.net/manual/en/ini.core.php#ini.post-max-size 的建议),并且 memory_limit
大于 post_max_size
。这些因素中的任何一个都可能导致 $_FILES
超全局返回为空,并导致上传错误。
在 php.ini 中尝试的其他内容:
增加 max_execution_time
以考虑上传持续时间(大文件通常需要比默认值 30 更长的时间),并且 max_input_time
也会相应增加。
您可能还需要使用 LimitRequestBody
指令修改 httpd.conf,因为这可能会覆盖 php.ini 中指定的任何内容。这是以字节为单位指定的,可以直接在 httpd.conf 或 .htaccess 文件中指定(假设您具有覆盖权限)。您还可以在每个目录的基础上指定它(为了安全),如下所示。
<Directory "/var/www/myuploaddir/">
LimitRequestBody 1073741824
</Directory>
最后,还要确保您有足够的临时和非临时存储空间来容纳正在上传的文件。该包不会捕获“空间不足”错误。
关于php - Fine-Uploader 中止上传并出现 'File is empty' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16570246/