Php 在Laravel中验证ajax上传的文件
我想验证AJAX在laravel中上传的文件,这是我在控制器中的代码:Php 在Laravel中验证ajax上传的文件,php,laravel,Php,Laravel,我想验证AJAX在laravel中上传的文件,这是我在控制器中的代码: public function changePicture(Request $request) { // get file : $file = $request->file('image'); $validator = Validator::make($request->all(), [ 'image' => 'image|mimes:jpg,jpeg,g
public function changePicture(Request $request)
{
// get file :
$file = $request->file('image');
$validator = Validator::make($request->all(), [
'image' => 'image|mimes:jpg,jpeg,gif,png|max:2048'
]);
if ($validator->fails())
return response()->json(['is' => 'failed', 'error' => $validator->getMessageBag()]);
return response()->json(['is'=>'success']);
}
但上载错误文件时不会发生任何情况,但上载有效文件时,会得到第二个响应:
是:成功
我的js代码:
$.ajax(
{
url: '/profile/change-picture',
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
type: 'POST',
data: formData,
mimeType: 'multipart/form-data',
contentType: false,
cache: false,
processData: false,
success: function (response){
if(response.is === 'failed'){
$('.ui.modal').modal('show');
}
}
});
但等待后出现错误:
20315736字节的帖子内容长度超过了8388608字节的限制
任何想法谢谢将这些道具添加到ajax中:
jQuery.ajax({
...
contentType: false,
processData: false,
此外,请确保将文件附加到表单数据。有很多方法可以做到这一点,这里有一个:
var data = new FormData();
jQuery.each(jQuery('#image')[0].files, function(index, file) {
data.append('my-image-' + index, file);
});
关于错误
您的Web服务器或PHP可能具有最大上载文件大小。我建议使用低于该值的文件进行测试。将这些道具添加到ajax中:
jQuery.ajax({
...
contentType: false,
processData: false,
此外,请确保将文件附加到表单数据。有很多方法可以做到这一点,这里有一个:
var data = new FormData();
jQuery.each(jQuery('#image')[0].files, function(index, file) {
data.append('my-image-' + index, file);
});
关于错误
您的Web服务器或PHP可能具有最大上载文件大小。我建议使用低于该值的文件进行测试。8388608字节是8M,这是PHP中的默认限制。将php.ini中的post_max_大小更新为更大的值 upload_max_filesize设置用户可以上载的最大文件大小,而post_max_size设置可以通过表单中的post发送的最大数据量
因此,您可以将upload_max_filesize设置为1兆,这意味着用户可以上载的最大单个文件是1兆字节,但如果post_max_大小设置为5,则用户可以一次上载其中5个。8388608字节是8兆字节,这是PHP中的默认限制。将php.ini中的post_max_大小更新为更大的值 upload_max_filesize设置用户可以上载的最大文件大小,而post_max_size设置可以通过表单中的post发送的最大数据量
因此,您可以将upload_max_filesize设置为1兆,这意味着用户可以上载的最大单个文件是1兆字节,但如果post_max_大小设置为5,他们可以一次上载其中5个文件。您所做的一切都是正确的,只是您跳过了8M 8388608bytes是8M,这是PHP中的默认限制。将php.ini中的post_max_size更新为更大的值 post_max_size和upload_max_filesize是可以设置为配置php.ini文件或.htaccess文件或httpd.conf文件的指令 php.ini示例:
post_max_size=15M
upload_max_filesize=15M
php_value post_max_size=15M
php_value upload_max_filesize=15M
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/html/example/
ErrorLog /var/log/httpd/error.log
<Directory /var/www/html/example/>
AllowOverride None
<IfModule mod_php5.c>
php_value post_max_size=15M
php_value upload_max_filesize=15M
</IfModule>
</Directory>
</VirtualHost>
.htaccess示例:
post_max_size=15M
upload_max_filesize=15M
php_value post_max_size=15M
php_value upload_max_filesize=15M
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/html/example/
ErrorLog /var/log/httpd/error.log
<Directory /var/www/html/example/>
AllowOverride None
<IfModule mod_php5.c>
php_value post_max_size=15M
php_value upload_max_filesize=15M
</IfModule>
</Directory>
</VirtualHost>
httpd.conf示例:
post_max_size=15M
upload_max_filesize=15M
php_value post_max_size=15M
php_value upload_max_filesize=15M
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/html/example/
ErrorLog /var/log/httpd/error.log
<Directory /var/www/html/example/>
AllowOverride None
<IfModule mod_php5.c>
php_value post_max_size=15M
php_value upload_max_filesize=15M
</IfModule>
</Directory>
</VirtualHost>
服务器名www.example.com
ServerAlias example.com
DocumentRoot/var/www/html/example/
ErrorLog/var/log/httpd/error.log
不允许超限
php_值post_max_size=15M
php\上传值\最大\文件大小=15M
你所做的一切都是真实的,只是你跳过了8M
8388608bytes是8M,这是PHP中的默认限制。将php.ini中的post_max_size更新为更大的值
post_max_size和upload_max_filesize是可以设置为配置php.ini文件或.htaccess文件或httpd.conf文件的指令
php.ini示例:
post_max_size=15M
upload_max_filesize=15M
php_value post_max_size=15M
php_value upload_max_filesize=15M
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/html/example/
ErrorLog /var/log/httpd/error.log
<Directory /var/www/html/example/>
AllowOverride None
<IfModule mod_php5.c>
php_value post_max_size=15M
php_value upload_max_filesize=15M
</IfModule>
</Directory>
</VirtualHost>
.htaccess示例:
post_max_size=15M
upload_max_filesize=15M
php_value post_max_size=15M
php_value upload_max_filesize=15M
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/html/example/
ErrorLog /var/log/httpd/error.log
<Directory /var/www/html/example/>
AllowOverride None
<IfModule mod_php5.c>
php_value post_max_size=15M
php_value upload_max_filesize=15M
</IfModule>
</Directory>
</VirtualHost>
httpd.conf示例:
post_max_size=15M
upload_max_filesize=15M
php_value post_max_size=15M
php_value upload_max_filesize=15M
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/html/example/
ErrorLog /var/log/httpd/error.log
<Directory /var/www/html/example/>
AllowOverride None
<IfModule mod_php5.c>
php_value post_max_size=15M
php_value upload_max_filesize=15M
</IfModule>
</Directory>
</VirtualHost>
服务器名www.example.com
ServerAlias example.com
DocumentRoot/var/www/html/example/
ErrorLog/var/log/httpd/error.log
不允许超限
php_值post_max_size=15M
php\上传值\最大\文件大小=15M
如果你使用ajax,你必须首先检查javascript,因为PHP将在上传整个图像后进行验证。你是否在ajax调用中设置了X-CSRF-TOKEN
?如果没有失败,也许你的图像实际上没有错?您发送的是什么?@noulein这与此无关,因为所有验证最终都应该在后端完成,始终如此。@OP-请将必需的添加到图像验证程序规则中。如果您使用ajax,您必须首先使用javascript进行检查,因为PHP将在上传整个图像后进行验证。您是否在Ajax调用中设置了X-CSRF-TOKEN
?如果没有失败,可能您的图像实际上没有错?您发送的是什么?@Nourein这无关紧要,因为所有验证最终都应该在后端完成,始终如此。@OP-请将必需的添加到图像验证程序规则中