dropzone.js php,上传30秒后,使用PHP上传的Dropzone.js失败

开发者分享了在处理用户上传大视频文件(小于200MB)时遇到的问题,涉及php.ini设置、Dropzone.js配置及PHP脚本处理。文章详细探讨了如何调整上传限制和解决服务器连接断开问题,寻求解决方案。
摘要由CSDN通过智能技术生成

我正在尝试将“大”文件上传到我的应用程序.用户必须能够上传小于200MB的视频文件,但似乎服务器在4MB或30秒后丢弃连接并且上载失败.

我已经在php.inifile中设置了所有参数,如下所示:

max_input_time = 320

max_execution_time = 320

max_file_uploads = 20

memory_limit = 512M

post_max_size = 201M

upload_max_filesize = 200M

当我上传2MB @ 1Mbps / s的文件时,一切正常(我不知道是否与文件大小或传输时间有关)

可以通过php_info访问live php_info()文件

虽然这里是DropZone.js conf:

$("#dZUpload").dropzone({

url: "/ajax/admin/admin.acceptVideo.php",

maxFilesize: 209715200,

acceptedFiles: "video/*",

addRemoveLinks: true,

dataType: "HTML",

data: { id: '' },

success: function (file, response, data) {

var imgName = response;

file.previewElement.classList.add("dz-success");

$('#form_video').val(imgName);

},

error: function (file, response) {

file.previewElement.classList.add("dz-error");

}

});

Dropzone.autoDiscover = false;

Dropzone.prototype.defaultOptions.dictRemoveFile = "Rimuovi file";

Dropzone.prototype.defaultOptions.dictCancelUpload = "Annulla";

以下是处理上传的PHP脚本:

require_once '../db.config.php';

header('Content-Type: text/plain; charset=utf-8');

ini_set('upload_max_filesize', '200M');

ini_set('post_max_size', '201M');

ini_set('max_input_time', 320);

ini_set('memory_limit', '256M');

try {

if (

!isset($_FILES['file']['error']) ||

is_array($_FILES['file']['error'])

) {

throw new RuntimeException('Invalid parameters.');

}

switch ($_FILES['file']['error']) {

case UPLOAD_ERR_OK:

break;

case UPLOAD_ERR_NO_FILE:

throw new RuntimeException('No file sent.');

break;

case UPLOAD_ERR_INI_SIZE:

break;

case UPLOAD_ERR_FORM_SIZE:

throw new RuntimeException('Exceeded filesize limit.');

break;

default:

throw new RuntimeException('Unknown errors.');

break;

}

// check filesize.

if ($_FILES['file']['size'] > 209715200) {

throw new RuntimeException('Exceeded filesize limit.');

}

// Check MIME Type.

$finfo = new finfo(FILEINFO_MIME_TYPE);

if (false === $ext = array_search(

$finfo->file($_FILES['file']['tmp_name']),

array(

'mp4' => 'video/mp4',

'mov' => 'video/mov',

'avi' => 'video/avi',

),

true

)) {

throw new RuntimeException('Invalid file format.');

}

// name uniquely.

$fileName = sha1_file($_FILES['file']['tmp_name']);

if (!move_uploaded_file($_FILES['file']['tmp_name'], sprintf('/var/www/html/beta.vedocompro.it/web/webtemp/%s.%s', $fileName, $ext ))) {

throw new RuntimeException('Failed to move uploaded file.');

}

try {

$PDO = new PDO('mysql:host=' . $DB_HOST . ';dbname=' . $DB_NAME,$DB_USER,$DB_PASS);

$insert = $PDO->prepare("INSERT INTO `videos` (`id`, `aid`, `accepted`, `uid`, `dir`) VALUES (NULL, '0', '0', '0', $fileName);");

$insert->execute();

echo $fileName;

} catch(PDOException $exception) {

echo $exception;

}

} catch (RuntimeException $e) {

echo $e->getMessage();

}

所以一切似乎都没问题,但服务器在出错之后断开了连接(我认为与PDOquery无关,导致2MB的较小文件将起作用).

你能帮忙找出问题所在吗?

编辑做了一些测试我发现脚本在执行30秒时完全丢失,我试图添加set_time_limit(0);在脚本的顶部,但没有再改变

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个完整的 PHP 代码示例,该示例演示了如何使用 Dropzone.js 将文件上传并保存到服务器上。 HTML 文件(index.html): ```html <!DOCTYPE html> <html> <head> <title>Dropzone.js 文件上传示例</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.7.0/min/dropzone.min.css"> </head> <body> <h1>Dropzone.js 文件上传示例</h1> <form action="upload.php" class="dropzone"></form> <script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.7.0/min/dropzone.min.js"></script> </body> </html> ``` PHP 文件(upload.php): ```php <?php // 设置允许上传的文件类型和大小限制 $allowedFileTypes = ['jpg', 'jpeg', 'png', 'gif']; $maxFileSize = 5 * 1024 * 1024; // 5MB // 检查上传的文件是否符合要求 if (!empty($_FILES['file'])) { $file = $_FILES['file']; if ($file['error'] === UPLOAD_ERR_OK && in_array(pathinfo($file['name'], PATHINFO_EXTENSION), $allowedFileTypes) && $file['size'] <= $maxFileSize) { // 生成新的文件名 $newFileName = uniqid() . '.' . pathinfo($file['name'], PATHINFO_EXTENSION); // 保存文件到服务器上 move_uploaded_file($file['tmp_name'], 'uploads/' . $newFileName); // 返回上传成功的信息 echo json_encode([ 'status' => 'success', 'message' => '文件上传成功', 'url' => 'uploads/' . $newFileName ]); } else { // 返回上传失败的信息 echo json_encode([ 'status' => 'error', 'message' => '文件上传失败' ]); } } else { // 返回上传失败的信息 echo json_encode([ 'status' => 'error', 'message' => '文件上传失败' ]); } ``` 上述代码中,首先设置了允许上传的文件类型和大小限制。然后,当用户上传文件时,PHP 脚本将检查上传的文件是否符合要求。如果符合要求,则生成新的文件名并将文件保存到服务器上,最后返回上传成功的信息和文件的 URL;否则,返回上传失败的信息。 请注意,上述代码中使用了 `move_uploaded_file` 函数将上传的文件保存到服务器上。在实际场景中,建议使用更安全的方式来保存文件,例如将文件保存到数据库或使用第三方存储服务(如 Amazon S3)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值