Fine Uploader需要对文件进行分块并重新加入

时间:2013-05-08 11:58:43

标签: php file-upload fine-uploader

我正在尝试为我的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);

}

我不知道我哪里出错了,我错过了什么。请有人指导我。

1 个答案:

答案 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);只在上传结束时(或者根本没有,一旦页面加载就会被删除)。但是再一次,在没有看到你的其余代码的情况下,我无法知道在这种特殊情况下哪种方法最有效。