Plupload; HTML5运行时,上传文件名变为BLOB

时间:2014-04-15 09:39:20

标签: php html5 video plupload

我正在使用Plupload将视频.mp4文件上传到我的网站。

我收到一个奇怪的错误。 它适用于小于5megs的文件。它会将文件{somestring} filename.mp4上传并重命名到右侧文件夹并回显文件名。

如果我尝试上传大于35兆的大文件,它会上传到正确的文件夹,但重命名文件乱码,如534cda3e360f2file_534cda3e3605c并删除.mp4文件扩展名。

我尝试过更改upload.php

$fileName = isset($_FILES['file']["name"]) ? $_FILES['file']["name"] : '';

但它仍然显示乱码文件名。 我没有启用unique_names或chunking。

<?php
/**
 * upload.php
 *
 * Copyright 2013, Moxiecode Systems AB
 * Released under GPL License.
 *
 * License: http://www.plupload.com/license
 * Contributing: http://www.plupload.com/contributing
 */


// 5 minutes execution time
@set_time_limit(60 * 60);

// Uncomment this one to fake upload time
// usleep(5000);

// Settings
//$targetDir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload";
$targetDir = '../../assets/video';
$cleanupTargetDir = true; // Remove old files
$maxFileAge = 5 * 3600; // Temp file age in seconds


// Create target dir
if (!file_exists($targetDir)) {
    @mkdir($targetDir);
}

$fileName = isset($_FILES['file']["name"]) ? $_FILES['file']["name"] : '';

// Clean the fileName for security reasons
$fileName = preg_replace('/[^\w\._]+/', '_', $fileName);
$fileName = preg_replace('/\s+/', '', $fileName);
$filePath = $targetDir . DIRECTORY_SEPARATOR . uniqid(). $fileName;
$filePiece = explode("/", $filePath);
$filenew = $filePiece[4];
// Chunking might be enabled
$chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;
$chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0;


// Remove old temp files    
if ($cleanupTargetDir) {
    if (!is_dir($targetDir) || !$dir = opendir($targetDir)) {
        die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}');
    }

    while (($file = readdir($dir)) !== false) {
        $tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file;

        // If temp file is current file proceed to the next
        if ($tmpfilePath == "{$filePath}.part") {
            continue;
        }

        // Remove temp file if it is older than the max age and is not the current file
        if (preg_match('/\.part$/', $file) && (filemtime($tmpfilePath) < time() - $maxFileAge)) {
            @unlink($tmpfilePath);
        }
    }
    closedir($dir);
}   


// Open temp file
if (!$out = @fopen("{$filePath}.part", $chunks ? "ab" : "wb")) {
    die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');
}

if (!empty($_FILES)) {
    if ($_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"])) {
        die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}');
    }

    // Read binary input stream and append it to temp file
    if (!$in = @fopen($_FILES["file"]["tmp_name"], "rb")) {
        die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
    }
} else {    
    if (!$in = @fopen("php://input", "rb")) {
        die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
    }
}

while ($buff = fread($in, 4096)) {
    fwrite($out, $buff);
}

@fclose($out);
@fclose($in);

// Check if file has been uploaded
if (!$chunks || $chunk == $chunks - 1) {
    // Strip the temp .part suffix off 
    rename("{$filePath}.part", $filePath);
}
echo $filenew;

4 个答案:

答案 0 :(得分:1)

我能够通过将php.ini配置文件更改为

来解决此问题

upload_max_filesize 120M 120M post_max_size 120M 120M

答案 1 :(得分:0)

&#39;&#39;&#39;&#39;来自分块。一种解决方案是过滤掉任何名为&#39; blob&#39;在结果文件中处理时

`if(array_key_exists('file', $_FILES)
        && array_key_exists('type', $_FILES['file']) 
        && array_key_exists('name', $_FILES['file'])
        && $_FILES['file']['name'] != 'blob'
        ){
            //Files ok
            $ResultsOk = true;          
    }`

答案 2 :(得分:0)

您需要添加文件名作为另一个参数。这可以通过pulploadQueue下的BeforeUpload事件完成,如下所示:

enter image description here

您也可以将unique_names设为false。 这样您就可以在$_POST['name']中找到文件名。

您可以找到帮助here 希望这可能有助于某人。

答案 3 :(得分:-1)

由于文件大小,您收到此错误。

如果您有web.config文件,请在system.web标记

下添加此行
 <httpRuntime maxRequestLength="1048576"/>

这将解决您的问题