2016-11-10 82 views
3

如果他們安裝這個驗證規則Laravel文件上傳驗證不會觸發 - TokenMismatchException

'user_file' => 'file|max:10240|mimes:xls,xlsx,doc,docx,pdf,zip' 

一切都很好我可以上傳的文件。

我有我的upload_max_filesize 32MB,和post_max_size要設置爲40MB在php.ini

但如果我嘗試上傳文件超過40MB大我的驗證規則,甚至不觸發。我得到TokenMismatchException錯誤....

如果有人可以通過簡單地想上傳一些非常大的文件(例如視頻文件)

回答

2

驗證這一點。當你突破後有效載荷的大小 - 一切都在下降,所以csrf_token不會來laravel和上傳文件是空的,所以它不能被驗證。

UPDATE

要解決這個問題,你需要使用JavaScript或jQuery的

這裏來檢查,然後再上傳文件的大小是一個例子:

How to check file input size with jQuery?

+0

但我怎樣才能給用戶一些反饋? tokenmissmatch是瘋狂的......或者我應該增加上傳文件的大小 – lewis4u

+0

我現在發現這個http://laravel.io/forum/02-20-2014-l40-csrf-tokenmismatchexception-when-uploading-large-files和你是對的有效載荷大小 – lewis4u

+0

@ lewis4u你根本不能。你應該使用JavaScript做文件大小檢查。或者,您可以禁用該特定路由的csrf檢查,然後檢查是否沒有數據從請求傳遞。 –

1

在文件上傳的情況下, ,該文件必須複製到臨時位置到服務器,然後規則將工作。所以你的服務器不允許大於40MB的文件(post_max_size)進入臨時位置,所以規則不起作用。 相反,要解決這個問題,您需要對文件進行前端驗證。

爲此,您可以使用簡單的Javascript,如下圖所示,

$('input[type="file"]').change(function() { 
if (this.files[0] != undefined) { 
    var name = this.name; 
    var filesize = this.files[0].size; 
    var field = $('#' + this.name).parents('.input-group'); 

    //check if file size is larger than 3MB(which is 3e+6 bytes) 
    if (filesize > 3000000) { 
     alert(filesize); 
    //reset that input field if its file size is more than 3MB 
     $('[name="' + name + '"]').val('') 
    } 
    } 
}); 

你可以只包括本作由字節大小的改變限制類型=「文件」的所有輸入。