我正在使用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;
答案 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事件完成,如下所示:
您也可以将unique_names
设为false
。
这样您就可以在$_POST['name']
中找到文件名。
您可以找到帮助here 希望这可能有助于某人。
答案 3 :(得分:-1)
由于文件大小,您收到此错误。
如果您有web.config文件,请在system.web标记
下添加此行 <httpRuntime maxRequestLength="1048576"/>
这将解决您的问题