в чем разница между getClientOriginalExtension() и Extension() в Laravel?

#laravel

Вопрос:

Оба метода возвращают расширение загруженного файла, так почему же они оба существуют ? Не могу найти между ними никакой разницы.

Комментарии:

1. Расширение является функцией Filesystem класса Laravel, в то время getOriginalClientExtension как является функцией UploadedFile (компонента Symfony): github.com/laravel/framework/blob/8.x/src/Illuminate/Filesystem/… против github.com/symfony/symfony/blob/5.4/src/Symfony/Component/. … Вы можете использовать эти ссылки, чтобы проверить, что на самом деле делает каждая функция.

2. @TimLewis спасибо тебе

3. Без проблем 😀 Кроме того, вот очень полезная ссылка: laravel.com/api/8.x , позволяет вам искать что угодно и предоставит ссылку на код для большинства классов, атрибутов, функций и т. Д.

4. @TimLewis еще раз спасибо, да, их документы просто потрясающие

5. Ха-ха, поработав с языками/фреймворками, которые имеют… скажем, «менее чем потрясающая» документация, я очень благодарен, что Laravel таков, каков он есть. Еще раз спасибо 😄

Ответ №1:

Эти методы доступны на каждом IlluminateHttpUploadedFile .

getClientOriginalExtension() возвращает расширение, извлеченное из исходного имени файла. Если вы пошлете image.png , это будет png

extension() возвращает расширение, извлеченное из самого файла (с использованием типа mime).

Например, если у вас есть image.pdf файл, вы переименовываете его image.png , а затем загружаете в свое приложение:

  • getClientOriginalExtension() будет возвращать png
  • extension() вернется pdf (или null если тип mime не может быть прочитан)

Комментарии:

1. Я допустил ошибку, о которой ты говорил extension() , и нет getExtension() . Они очень похожи, но я обновил свой ответ, чтобы он был более точным.

2. да, я понимаю, я думал, что это просто опечатка, в любом случае, еще раз спасибо

3. Возможно, стоит добавить, что getClientOriginalExtension никогда не следует доверять определению типа файла из-за того, как легко клиенты могут лгать о расширении файла.

Ответ №2:

getClientOriginalExtension получает расширение КЛИЕНТА, а не реальное расширение типа mime, чтобы использовать extension его более безопасно