2017-09-06 475 views
0

我的網站託管在共享服務器上。最大上傳限制爲5MB。如果上傳的文件小於5MB,所有驗證和文件上傳都可以正常工作。但是當一個大於5MB的文件上傳時,我看到這個 enter image description here。 如何驗證或強制文件處於服務器的上傳限制之下?Laravel最大上傳大小限制

+0

可能你必須在php.ini中更改'upload_max_filesize'值。如果您無權更改ini文件,請聯繫您的主機提供商以更改此內容 –

+0

有沒有其他方法?不更改服務器的上傳限制? – baig772

+0

在您的資源文件夾中添加一個htaccess ..然後添加這一行..'php_value upload_max_filesize xM'和'php_value post_max_size xM'其中x =任意數值..例如:100M = 100mb – Demonyowh

回答

1

你做似乎沒有興趣更改PHP限制以允許更大的文件。它看起來像你想要你最大上傳5MB,並返回一個適當的迴應,如果它是。

您可以在異常處理程序app/Exceptions/Handler.php內處理FileException異常。更新render方法以添加您需要的代碼。例如,如果您想要返回驗證異常,則需要在異常處理程序中處理FileException異常的驗證。

public function render($request, Exception $exception) 
{ 
    if ($exception instanceof \Symfony\Component\HttpFoundation\File\Exception\FileException) { 
     // create a validator and validate to throw a new ValidationException 
     return Validator::make($request->all(), [ 
      'your_file_input' => 'required|file|size:5000', 
     ])->validate(); 
    } 

    return parent::render($request, $exception); 
} 

這是未經測試的,但應該給你的一般想法。

你也可以通過javascript做客戶端驗證,這樣一個太大的文件從來就不會真正發送到你的服務器,但是javascript可以被客戶端禁用或者刪除,所以最好有一個很好的服務器側面處理設置。

對於客戶端驗證,如果您將事件處理程序附加到文件輸入的「更改」事件,則可以使用this.files[0].size檢查文件大小,然後執行任何其他操作(禁用表單,刪除上載的文件等)

+1

這就是我正在尋找的東西。 – baig772

3
$validator = Validator::make($request->all(), [ 
    'file' => 'max:5120', //5MB 
]); 
在控制器

,並在php.ini

upload_max_filesize = 10MB 
+0

如上所述,如果文件小於5MB,但如果我上傳的文件大小爲10MB,並且我的服務器上的最大上傳限制爲5MB,則此操作將失效,它將引發異常 – baig772

+0

,則需要將apache的max_upload_size更改爲大於5MB作爲來自apache而不是laravel的異常,檢查編輯的ans @ baig772 – Exprator

2

您可以使用Laravel驗證規則:

'image_file_input_name' => 'required|mimes:jpeg,bmp,png|size:5000', 

大小:值

驗證字段必須具有與給定值匹配的大小。 對於字符串數據,該值對應於字符數。對於 數字數據,該值對應於給定的整數值。對於 數組,大小對應於數組的數量。對於文件,大小 對應的文件大小以千字節爲單位。

You can read more about validation and its usage.

0

您可以通過最大驗證

'file' => 'required|max:5128'; // max file size: 5M 
0

在laravel可以驗證這樣的檢查文件的大小 -

$validator = Validator::make($request->all(), [ 
    'file' => 'max:5120', 
]); 

該值以千字節爲單位。即最大:10240 =最大10MB。 而在jQuery的 -

結合您的輸入字段

$('#upFile').bind('change', function() { 

    //this.files[0].size   gets the size of your file and then you can validate accourdingly... 
    alert(this.files[0].size); 

}); 

希望這將幫助你的onchange事件。

0

你可以這樣做與jQuery/JavaScript的(這意味着該文件將不會被上傳,但你可以檢查該文件,然後發送到PHP腳本)

$('#myFile').bind('change', function() { 
    let filesize = this.files[0].size // On older browsers this can return NULL. 
    let filesizeMB = (filesize/(1024*1024)).toFixed(2); 

    if(filesizeMB <= 5) { 
     // Allow the form to be submitted here. 
    } else { 
     // Don't allow submission of the form here. 
    } 

}); 

但總是做服務器端驗證反正。 Incase你搬到一個更強大的網站,並仍然希望你的網站沒有任何怪癖的工作。

$validator = Validator::make($request->all(), [ 
    'file' => 'max:5120', //5MB 
]); 

所有這些都沒有經過測試,但應該有效。

1

的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>