3

我正在尝试为我的 PHP 项目集成精细的上传器 [Jquery 包装器] 。在那,我试图通过使用分块选项上传一个 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);

}

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

4

1 回答 1

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); 仅在上传结束时(或根本不会,页面加载后将关闭)。但是再一次,如果没有看到您的其余代码,我不知道在这种特殊情况下什么最有效。

于 2013-11-15T15:51:16.813 回答