Подтвердите загрузку файла .tar в Laravel 5.8. - PullRequest
1 голос
/ 09 марта 2020

У меня есть этот код

$inputs    = Input::all();
$file      = Input::file('file');
$validator = Validator::make($request->all(), [
    'file' => 'required|max:50000|mimes:application/x-tar',
]);

if ($validator->fails()) {

    $messages = $validator->messages();
    dd($file,$messages); <<<< --- keep executing 


    return Redirect::to('/vnf-packages/create')->withErrors($validator)->withInput()
    ->with('error','Something is wrong with your upload image');
} else {
..
}

Я не знаю, почему он продолжал попадать в блок сбоя. Я загрузил файл с .tar.

Я что-то упустил в своих кодах?


Обновлен

Как вы можете видеть, я загрузил файл .tar

dd($file,$messages);

UploadedFile {#446 ▼
  -test: false
  -originalName: "config-vnfp-vyos-567.tar"
  -mimeType: "application/x-tar"
  -error: 0
  #hashName: null
  path: "/private/var/tmp"
  filename: "phpNaZGxr"
  basename: "phpNaZGxr"
  pathname: "/private/var/tmp/phpNaZGxr"
  extension: ""
  realPath: "/private/var/tmp/phpNaZGxr"
  aTime: 2020-03-09 15:10:28
  mTime: 2020-03-09 15:10:28
  cTime: 2020-03-09 15:10:28
  inode: 14703131
  size: 140
  perms: 0100600
  owner: 70
  group: 0
  type: "file"
  writable: true
  readable: true
  executable: false
  file: true
  dir: false
  link: false
}
MessageBag {#454 ▼
  #messages: array:1 [▼
    "file" => array:1 [▼
      0 => "The file must be a file of type: tar."
    ]
  ]
  #format: ":message"
}

Обновлен 2

'file' => 'required|max:50000|mimes:tar', //fail 
'file' => 'required|max:50000|mimes:application/x-tar', //fail 
'file' => 'required', //success 

1 Ответ

1 голос
/ 09 марта 2020

Я пытался проверить загрузку с файлом .tar, и когда я использую метод getMimeType, он возвращает следующее:

application/gzip

Таким образом, ваше правило проверки должно быть:

'file' => 'required|mimetypes:application/gzip',

Если вы хотите использовать правило mimes, вам понадобится что-то вроде этого:

'file' => 'required|mimes:gz',

И после некоторых исследований я обнаружил следующее: https://superuser.com/questions/901962/what-is-the-correct-mime-type-for-a-tar-gz-file

Подробнее о том, как валидатор проверяет эти два правила, можно узнать в Illuminate/Validation/Concerns/ValidatesAttributes.php.

В методе validateMimes используется метод guessExtension() файла, который возвращает gz.

$value->getPath() !== '' && in_array($value->guessExtension(), $parameters)

. При проверке метода validateMimeTypes используется метод файла getMimeType(), который возвращает application/gzip.

return $value->getPath() !== '' &&
    (in_array($value->getMimeType(), $parameters) ||
    in_array(explode('/', $value->getMimeType())[0].'/*', $parameters));
.
...