Getting Laravel 4 to validate application/vnd.ms-office



在我的应用程序中,用户可以上传几个特定类型的文件,其中一个需要是一个据称较旧的excel文件类型application/vnd.ms-office

我有mime:xls,doc,csv,但这些不能验证mime类型application/vnd.ms-office

我已经看了一些其他的地方,使验证器规则mime:xls,doc,csv,application/vnd.ms-office不工作。

如果我编辑SymfonyComponentHttpFoundationFileMimeTypeMimeTypeExtensionGuesser以包含'application/vnd.ms-office' => 'office'并调整验证器规则为mime:xls,doc,csv,office,我可以让它工作,但我将失去下次我通过编写器更新。

有什么方法可以即时操作mime类型数组吗?

此外,application/vnd.ms-office似乎可能包含广泛的文件。我应该允许这样吗?

事实证明,我已经设法通过使用自定义验证器来获得我正在寻找的结果。

如果一段时间后我没有得到更好的答案,我就把这个标记为正确答案。

top of class:

use SymfonyComponentHttpFoundationFileUploadedFile;

在post函数内:

Validator::extend('uploadable', function($attr, $file, $params)
{
    return $file instanceof UploadedFile
        && in_array($file->getMimeType(), array(
            'application/msword',
            'application/vnd.oasis.opendocument.text',
            'application/vnd.ms-excel',
            'application/pdf',
            'text/html',
            'text/rtf',
            'text/csv',
            'image/vnd.adobe.photoshop',
            'application/zip',
            'application/vnd.ms-office',
        ));
});
$validator = Validator::make(
    Input::all(),
    array(
        'byMail' => 'in:Y',
        'file1' => 'uploadable',
        'file2' => 'uploadable',
        'file3' => 'uploadable',
    ),
    (array) Lang::get('errors.upload')
);

我有一个类似的问题,想验证一些额外的MIME类型,但不想失去Symfony的基本验证。

我扩展了Symfony的验证,将以下内容添加到AppService provider中,并在验证规则中使用extended_mimes而不是mimes。

Validator::extend('extended_mimes', function($attr, $file, $parameters)
{
        // get the file's MIME type
        $mime = finfo_file(finfo_open(FILEINFO_MIME_TYPE), $file);
        // get Symfony's guesser
        $guesser = new MimeTypeExtensionGuesser;
        // create bonus guesses
        $bonus_guesses = [
            'application/vnd.ms-office' => 'xls',
        ];
        $bonus_guess = isset($bonus_guesses[$mime]) ? $bonus_guesses[$mime] : null;
        // check whether we either hit a correct guess, or we make a hit in a bonus guess
        return in_array($guesser -> guess($mime), $parameters) || in_array($bonus_guess, $parameters);
});

只要添加任何你想要的奖金猜测来设置额外的mime及其扩展。

你需要在AppServiceProvider的顶部包含Validator和SymfonyComponentHttpFoundationFileMimeType mimeypeextensionguesser。

最新更新