如何在 jQuery 中限制最多 1 个文件上传 - 在 PHP 中从后端上传文件
How to limit maximum 1 file upload in jQuery-File-Upload from backend in PHP
我正在使用 jQuery-File-Upload 并尝试将最大图片上传限制为 1(单张图片上传)。
我正在使用位于 server/php/
中的演示版本本身的示例 php 文件作为 UploadHandler.php
到目前为止,我已经阻止了在 JS 中拖放时的多张图片上传,但由于它只是在客户端,不能作为一个完整的证明解决方案来信任,我想知道我该如何限制最大号每个请求的上传数量
到目前为止我已经完成了:
<input class="photo file" id="fileupload" name="images" type="file">
在 JS 部分:
$('#fileupload').fileupload({
url: url,
dataType: 'json',
autoUpload: true,
dropZone: $('#fileupload'),
singleFileUploads: false,
}).on('fileuploadadd', function (e, data) {
//Hides error
$('.error').hide().children().text('');
var maxFileUploadAllowed = 1;
var fileCount = data.files.length;
if (fileCount > maxFileUploadAllowed) {
$('.error').fadeIn().children().text("You are allowed to upload only 1 file");
return false;
}
这可以正常工作,但在后端限制 1 个文件也是必要的
在一些挖掘中我发现 options
中有一个参数作为 'max_number_of_files' => null,
我尝试将其更改为 1
但随后在每个文件上传时甚至在单个文件上传时它开始给出错误为 Maximum File limit exceeded
在进一步挖掘之后,我发现这个 if
语句中的检查在某种程度上是正确的并导致错误。
if (is_int($this->options['max_number_of_files']) &&
($this->count_file_objects() >= $this->options['max_number_of_files']) &&
// Ignore additional chunks of existing files:
!is_file($this->get_upload_path($file->name))) {
$file->error = $this->get_error_message('max_number_of_files');
return false;
}
我做了 echo $this->count_file_objects()
,发现它实际上返回了上传目录中允许的最大文件数。
因此演示代码中没有可以限制的处理程序。在后端上传文件的数量。
只是想知道是否有办法限制号码。后端的文件上传量?
当用户 fiddle 以下内容时会出现问题:
- 名称数组
<input class="photo file" id="fileupload" name="images[]" type="file">
- "multiple"
<input class="photo file" id="fileupload" name="images[]" type="file" multiple>
中的属性
- 或者fiddle跟下面的一块
代码如下:
var maxFileUploadAllowed = 1;
var fileCount = data.files.length;
if (fileCount > maxFileUploadAllowed) {
$('.error').fadeIn().children().text("You are allowed to upload only 1 file");
return false;
}
因为后台没有check。
深入研究 server/php/UploadHandler.php
中演示中的 PHP 代码后
我发现上传过程正在 POST
上进行,因此调用 $this->post($this->options['print_response']);
方法来处理上传:
在此过程之前,validate()
中有一些初始验证:
protected function validate($uploaded_file, $file, $error, $index) {
if ($error) {
$file->error = $this->get_error_message($error);
return false;
}
$content_length = $this->fix_integer_overflow(
(int)$this->get_server_var('CONTENT_LENGTH')
);
$post_max_size = $this->get_config_bytes(ini_get('post_max_size'));
if ($post_max_size && ($content_length > $post_max_size)) {
$file->error = $this->get_error_message('post_max_size');
return false;
}
...
return true;
}
所以很明显 validate()
负责初步检查。
最初,在选项中,我添加了一个名为 max_files_upload_allowed: 1
的参数,然后我在 $error_messages
中添加了一条错误消息,如 'max_files_upload_allowed' => 'You are not allowed to upload multiple files at once'
然后我创建了我的方法 getUploadFilesCount()
来检查号码。用户添加到上传队列的文件数:
protected function getUploadFilesCount() {
$file_upload_count = $this->get_upload_data($this->options['param_name']);
return count($file_upload_count['name']);
}
然后添加以下检查 validate()
//Check max_files_upload_allowed here
if (is_int($this->options['max_files_upload_allowed']) && (
$this->getUploadFilesCount() > $this->options['max_files_upload_allowed'] &&
$this->options['max_files_upload_allowed'] > 0)
) {
$file->error = $this->get_error_message('max_files_upload_allowed');
return false;
}
瞧!如果用户添加的文件多于 max_files_upload_allowed: 1
中列出的文件,那么他将收到错误。
这就解决了目的,防止恶意尝试并增加了所用文件上传过程的可靠性。
我正在使用 jQuery-File-Upload 并尝试将最大图片上传限制为 1(单张图片上传)。
我正在使用位于 server/php/
中的演示版本本身的示例 php 文件作为 UploadHandler.php
到目前为止,我已经阻止了在 JS 中拖放时的多张图片上传,但由于它只是在客户端,不能作为一个完整的证明解决方案来信任,我想知道我该如何限制最大号每个请求的上传数量
到目前为止我已经完成了:
<input class="photo file" id="fileupload" name="images" type="file">
在 JS 部分:
$('#fileupload').fileupload({
url: url,
dataType: 'json',
autoUpload: true,
dropZone: $('#fileupload'),
singleFileUploads: false,
}).on('fileuploadadd', function (e, data) {
//Hides error
$('.error').hide().children().text('');
var maxFileUploadAllowed = 1;
var fileCount = data.files.length;
if (fileCount > maxFileUploadAllowed) {
$('.error').fadeIn().children().text("You are allowed to upload only 1 file");
return false;
}
这可以正常工作,但在后端限制 1 个文件也是必要的
在一些挖掘中我发现 options
中有一个参数作为 'max_number_of_files' => null,
我尝试将其更改为 1
但随后在每个文件上传时甚至在单个文件上传时它开始给出错误为 Maximum File limit exceeded
在进一步挖掘之后,我发现这个 if
语句中的检查在某种程度上是正确的并导致错误。
if (is_int($this->options['max_number_of_files']) &&
($this->count_file_objects() >= $this->options['max_number_of_files']) &&
// Ignore additional chunks of existing files:
!is_file($this->get_upload_path($file->name))) {
$file->error = $this->get_error_message('max_number_of_files');
return false;
}
我做了 echo $this->count_file_objects()
,发现它实际上返回了上传目录中允许的最大文件数。
因此演示代码中没有可以限制的处理程序。在后端上传文件的数量。
只是想知道是否有办法限制号码。后端的文件上传量?
当用户 fiddle 以下内容时会出现问题:
- 名称数组
<input class="photo file" id="fileupload" name="images[]" type="file">
- "multiple"
<input class="photo file" id="fileupload" name="images[]" type="file" multiple>
中的属性
- 或者fiddle跟下面的一块
代码如下:
var maxFileUploadAllowed = 1;
var fileCount = data.files.length;
if (fileCount > maxFileUploadAllowed) {
$('.error').fadeIn().children().text("You are allowed to upload only 1 file");
return false;
}
因为后台没有check。
深入研究 server/php/UploadHandler.php
我发现上传过程正在 POST
上进行,因此调用 $this->post($this->options['print_response']);
方法来处理上传:
在此过程之前,validate()
中有一些初始验证:
protected function validate($uploaded_file, $file, $error, $index) {
if ($error) {
$file->error = $this->get_error_message($error);
return false;
}
$content_length = $this->fix_integer_overflow(
(int)$this->get_server_var('CONTENT_LENGTH')
);
$post_max_size = $this->get_config_bytes(ini_get('post_max_size'));
if ($post_max_size && ($content_length > $post_max_size)) {
$file->error = $this->get_error_message('post_max_size');
return false;
}
...
return true;
}
所以很明显 validate()
负责初步检查。
最初,在选项中,我添加了一个名为 max_files_upload_allowed: 1
的参数,然后我在 $error_messages
中添加了一条错误消息,如 'max_files_upload_allowed' => 'You are not allowed to upload multiple files at once'
然后我创建了我的方法 getUploadFilesCount()
来检查号码。用户添加到上传队列的文件数:
protected function getUploadFilesCount() {
$file_upload_count = $this->get_upload_data($this->options['param_name']);
return count($file_upload_count['name']);
}
然后添加以下检查 validate()
//Check max_files_upload_allowed here
if (is_int($this->options['max_files_upload_allowed']) && (
$this->getUploadFilesCount() > $this->options['max_files_upload_allowed'] &&
$this->options['max_files_upload_allowed'] > 0)
) {
$file->error = $this->get_error_message('max_files_upload_allowed');
return false;
}
瞧!如果用户添加的文件多于 max_files_upload_allowed: 1
中列出的文件,那么他将收到错误。
这就解决了目的,防止恶意尝试并增加了所用文件上传过程的可靠性。