Php 在Laravel中验证ajax上传的文件

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

我想验证AJAXlaravel中上传的文件,这是我在控制器中的代码:

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

8388608bytes8M,这是PHP中的默认限制。将php.ini中的post_max_size更新为更大的值

post_max_sizeupload_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

8388608bytes8M,这是PHP中的默认限制。将php.ini中的post_max_size更新为更大的值

post_max_sizeupload_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-请将
必需的
添加到图像验证程序规则中