我正在尝试为我的PHP项目集成精细上传程序[Jquery wrapper] 。在那,我试图通过使用分块选项上传25MB文件。
但是这里发生的事情是,它将文件存储为 blob0,blob1,blob2 ...
我希望将原始文件存储在该位置。但是在这里,块以不同的名称存储。到目前为止我累了的是,
<div id="jquery-wrapped-fine-uploader"></div>
<script src="jquery.js" type="text/javascript"></script>
<script src="jquery.fineuploader-3.5.0.js"></script>
<script>
$(document).ready(function () {
$('#jquery-wrapped-fine-uploader').fineUploader({
debug: true,
request: {
endpoint: 'upload.php',
},
chunking: {
enabled: true,
partSize: 2000000,
paramNames: {
partIndex: 'qqpartindex',
partByteOffset: 'qqpartbyteoffset',
chunkSize: 'qqchunksize',
totalFileSize: 'qqtotalfilesize',
totalParts: 'qqtotalparts',
filename: 'qqfile'
}
}
});
});
</script>
PHP
if ($_FILES["qqfile"]["error"] > 0)
{
echo "Return Code: " . $_FILES["qqfile"]["error"] . "<br>";
} else {
$partIndex = $_POST["qqpartindex"];
$fileName = $_POST["qqfile"];
move_uploaded_file($_FILES["qqfile"]["tmp_name"], "data/" . $_FILES["qqfile"]["name"].$partIndex);
$result['success'] = true;
echo json_encode($result);
}
我不知道我哪里出错了,我错过了什么。请有人指导我。
答案 0 :(得分:1)
重点是,这是精细上传者的一个特征。这些块是作为单独的文件提供的,这样如果您的上传被破坏,您将有办法比较和丢弃无效的块。如果您想获取该文件,您需要的是以下内容:
if ($_FILES["qqfile"]["error"] > 0)
{
echo "Return Code: " . $_FILES["qqfile"]["error"] . "<br>";
} else {
$partIndex = $_POST["qqpartindex"];
$fileName = $_POST["qqfile"];
move_uploaded_file($_FILES["qqfile"]["tmp_name"], "data/" . $_FILES["qqfile"]["name"].$partIndex);
// INSERT CODE HERE TO CHECK THE INTEGRITY OF "data/" . $_FILES["qqfile"]["name"].$partIndex
$file = fopen($filename, 'a');
$content = file_get_contents("data/" . $_FILES["qqfile"]["name"].$partIndex);
if (fwrite($file, $content)) $result['success'] = true;
fclose($file);
echo json_encode($result);
}
,其中$ filename是您要上传的文件的名称。我会告诉你如何通过这个代码,但它可能更容易在上游定义它。此外,根据您的上游代码,在上传开始时执行fopen可能会更节省内存,并且在代码结束时fclose(例如
$file = FALSE;
if ($partIndex == 0) $file = fopen("filename");
而不是行$ file = fopen($ filename,'a');但是,在这种情况下你需要fclose($ file);只在上传结束时(或者根本没有,一旦页面加载就会被删除)。但是再一次,在没有看到你的其余代码的情况下,我无法知道在这种特殊情况下哪种方法最有效。