我想在 laravel 中验证 AJAX 上传的文件,这是我控制器中的代码:
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');
}
}
});
但等待后出现错误:
POST内容长度20315736字节超过了8388608字节的限制。
任何想法!!的感谢
答案 0 :(得分:1)
将这些道具添加到你的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);
});
您的网络服务器或PHP可能具有最大上传文件大小。我建议使用低于该值的文件进行测试。
答案 1 :(得分:1)
您所做的一切都是真的,只有您跳过 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
.htaccess示例:
php_value post_max_size=15M
php_value upload_max_filesize=15M
httpd.conf示例:
<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>
答案 2 :(得分:0)
8388608字节是8M,PHP中的默认限制。将php.ini中的post_max_size更新为更大的值。
upload_max_filesize设置用户可以上传的最大文件大小,而post_max_size设置可以通过表单中的POST发送的最大数据量。
因此,您可以将upload_max_filesize设置为1 meg,这意味着用户可以上传的最大单个文件是1兆字节,但如果post_max_size设置为5,他们可以一次上传其中的5个。