如何修复“文件上传失败。”使用任何图像上传验证时出错 - Laravel 5.7
Posted
技术标签:
【中文标题】如何修复“文件上传失败。”使用任何图像上传验证时出错 - Laravel 5.7【英文标题】:How to fix 'The file failed to upload.' error using any validation for image upload - Laravel 5.7 【发布时间】:2019-09-11 03:52:11 【问题描述】:我使用的是 Laravel 5.7
我正在尝试上传图像文件并使用内置的 laravel 验证来验证其上传。它不断回复'The file failed to upload.'
我正在使用 AJAX 上传这些数据。我的表单设置了enctype="multipart/form-data"
。
我已经想办法在 AJAX 请求中包含 CSRF 令牌。
我已经修复了php.ini
max_file_size 问题,我正在测试的文件远低于 10MB。
如果我上传一个文本文件(例如),并且验证设置为required|image|max:10000
,它将正确阻止文件上传并以'File must be an image.'
响应
如果我禁用所有验证,文件上传就好了。
我想不出我可能做错了什么。请帮忙,因为我的项目目前处于停顿状态。
表单 HTML:
<form method="post" class="dropzone" action=" route('images') " enctype="multipart/form-data"
data-nopants-load="dropzone'transformImage':true,'acceptedFiles-1':'image/jpg','previewsContainer':'#dropzone-previews'">
@method('post')
@csrf
<div class="dz-border">
<div class="background"></div>
<div class="border"></div>
</div>
<div class="dz-message margins-auto _font-size-large"><span>Drop Images here or <span class="_underline">Click</span> to Upload.</span></div>
<div class="fallback flex-col">
<div class="self-center margin-bottom">
<input name="file" type="file" class="form-input" multiple />
</div>
<button type="submit" class="button -call">Upload</button>
</div>
</form>
UploadImageFormRequest.php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;
class UploadImageFormRequest extends FormRequest
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
return Auth::check();//user()->can('create', Organization::class);
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
return ['file' => 'required|image|mimes:jpeg,bmp,png'];
UploadImagesController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests\UploadImageFormRequest;
class UploadImagesController extends Controller
public function __construct()
$this->middleware('auth:user,admin');
public function store(UploadImageFormRequest $request)
//Wont get here...
【问题讨论】:
【参考方案1】:就我而言,问题在于upload_max_filesize。所以在 php.ini 文件中设置 upload_max_filesize 解决了这个问题。
upload_max_filesize = 40m
post_max_size = 50m
【讨论】:
【参考方案2】:我认为多重属性将其转换为数组尝试删除多重属性
<input name="file" type="file" class="form-input" multiple />
到这里
<input name="file" type="file" class="form-input"/>
如果你想要多张图片,你应该这样做
<input name="file[]" type="file" class="form-input" multiple />
和你这样的验证
return [
'file' => 'array',
'file.*' => 'image|mimes:jpeg,bmp,png'
];
【讨论】:
我不确定这是否是最终修复,但它现在肯定可以工作,而且你教了我一些关于 laravel 对上传的期望的事情。谢谢!【参考方案3】:添加到@Rahul Reghunath 答案。
这可能是因为您的服务器上的上传大小限制。
php 中默认的文件大小上传限制为 2MB。通过基于 Web 的内容管理系统或文档管理系统将文件上传到您的 VPS 或专用服务器时,您可能需要增加此文件大小限制以容纳更大的文件。
修改三个设置
设置以下三个配置选项:
1.) upload_max_filesize - 上传文件的最大大小。 2.) memory_limit - 这设置了脚本允许分配的最大内存量(以字节为单位)。这有助于防止编写不佳的脚本耗尽服务器上的所有可用内存。请注意,要没有内存限制,请将此指令设置为 -1。 3.) post_max_size - 设置允许发布数据的最大大小。此设置也会影响文件上传。要上传大文件,该值必须大于upload_max_filesize。如果您的配置脚本启用了内存限制,那么 memory_limit 也会影响文件上传。一般来说,memory_limit 应该大于 post_max_size。
更改设置的两种方法
根据您对服务器的访问级别,您可以通过两种不同的方法修改上述设置。
方法一:编辑 php.ini
如果您正在运行 (vps) 虚拟专用服务器或专用服务器,您的 root 帐户将有权访问 php.ini 文件。这可以使用您服务器上的 Webmin 安装或通过 SSH 进行编辑
a) Edit php.ini via Webmin
=======================================================================
1.) Open the Webmin control Panel
2.) In the navigation, go to "Tools > PHP Configuration"
3.) Click "Manage" next the Global PHP configuration file( URL: https://snag.gy/rH9RKD.jpg )
4.) Click "Resource Limits"
5.) Modify the settings based on the three settings above.
=======================================================================
b) 通过 SSH 编辑 php.ini
编辑您的 php.ini 文件(通常存储在 /etc/php.ini 或 /etc/php.d/cgi/php.ini 或 /usr/local/etc/php.ini 中):
Code: [Select]
# vi /etc/php.ini
memory_limit = 128M
upload_max_filesize = 20M
post_max_size = 30M
保存并关闭文件。重新启动 Apache Web 服务器: 代码:[选择]
# service httpd restart
方法#2:编辑.htaccess
编辑您网站根目录中的 .htaccess 文件。当您无权访问服务器上的 php.ini 时,这很有用。您可以在本地创建 .htaccess 文件并通过 FTP 上传。
追加/修改设置:
php_value upload_max_filesize 20M
php_value post_max_size 30M
php_value memory_limit 128M
【讨论】:
以上是关于如何修复“文件上传失败。”使用任何图像上传验证时出错 - Laravel 5.7的主要内容,如果未能解决你的问题,请参考以下文章