Laravel 5.5 验证 mimes:apk 不起作用

Posted

技术标签:

【中文标题】Laravel 5.5 验证 mimes:apk 不起作用【英文标题】:Laravel 5.5 Validation mimes:apk doesn't work 【发布时间】:2018-06-03 04:08:41 【问题描述】:

我正在尝试验证文件上传。它可以是多种类型的文件,包括 vnd.android.package-archive (apk) 文件。 laravel 文档引用了此链接https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types 上的 mimes 类型列表。但是,如果我测试 .apk 文件,它会出错并且不会将其识别为有效的 mime。

这是rules数组我的请求文件

return [
    'file' => [
        'max:' . config('medialibrary.max_digital_asset_file_size'),
        'mimes:' . config('medialibrary.digital_media_file_mime_types')
    ]
];

我像这样在 medialibrary 配置文件中全局设置 mime 类型

'digital_media_file_mime_types' => 'doc,docx,xls,csv,txt,pdf,zip,jpeg,jpg,png,ppt,mov,mpeg,mp4,apk',

我也试过这样

'digital_media_file_mime_types' => 'doc,docx,xls,csv,txt,pdf,zip,jpeg,jpg,png,ppt,mov,mpeg,mp4,vnd.android.package-archive',

我可以上传 pdf 和 csv 和 .zip 等 OK

任何线索都会很方便。

【问题讨论】:

【参考方案1】:

好的,我想通了。当我将logger(request()->all()) 放在请求规则数组的顶部时,file 就这样出来了

'file' => 
  Illuminate\Http\UploadedFile::__set_state(array(
     'test' => false,
     'originalName' => 'QuickDrive.apk',
     'mimeType' => 'application/vnd.android.package-archive',
     'size' => 95585970,
     'error' => 0,
     'hashName' => NULL,
  )),

但是,我设法找到了 Laravel 框架中验证 mime 的方法。在vendor/laravel/framework/src/illuminate/Validation/Concerns/ValidatesAttributes.php 类中,有一个validateMimes 方法。我在返回之前在其底部放置了另一个记录器,以查看文件的“猜测”扩展名是什么,结果显示为jar,当我查看它时,它是application/java-archive 文件类型。所以 Laravel 基本上是在猜测文件类型是什么,而对于 .apk 文件却是错误的。所以我将jar 添加到我的可接受哑剧列表中,它工作正常。也许不是很出色,但我通过了这个障碍。

【讨论】:

以上是关于Laravel 5.5 验证 mimes:apk 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.5 文件扩展验证不起作用

Laravel 上传并验证 apk 文件

Laravel 5 Mime 验证

Laravel 可以验证 markdown mime 类型吗?

Laravel 5.5 的自定义验证对象/类

Laravel 5.5 - 同时验证多个表单请求