Я пытаюсь загрузить файл MP3 в приложение Laravel и столкнулся с проблемой, когда, хотя атрибут файла имеет значение «аудио/mpeg», он загружается как «приложение/октет-поток» (.bin) файл. Когда я пытаюсь умереть и вывести файл на серверный код с помощью:
dd($request->file('file'));
Я получил:
UploadedFile {#187 ▼
-test: false
-originalName: "CUS12309821-20-AUG-2016-13-48-13.mp3"
-mimeType: "audio/mpeg"
-size: 47000471
-error: 0
path: "/private/var/folders/c7/6ws0lxy95dd_lhz1k067_zkc0000gn/T"
filename: "phpyZCsbU"
basename: "phpyZCsbU"
pathname: "/private/var/folders/c7/6ws0lxy95dd_lhz1k067_zkc0000gn/T/phpyZCsbU"
extension: ""
realPath: "/private/var/folders/c7/6ws0lxy95dd_lhz1k067_zkc0000gn/T/phpyZCsbU"
aTime: 2016-09-20 12:56:00
mTime: 2016-09-20 12:56:00
cTime: 2016-09-20 12:56:00
inode: 4565593
size: 47000471
perms: 0100600
owner: 501
group: 20
type: "file"
writable: true
readable: true
executable: false
file: true
dir: false
link: false
}
Посмотрите, как, когда я использую этот метод, он действительно говорит, что атрибут файла для mimeType является правильным форматом «аудио/мпег». Однако, когда я вызываю метод getMimeType() для файла после его загрузки, я получаю:
"application/octet-stream"
Вот код маршрутизируемого метода:
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$file = $request->all();
$filePath = Storage::putFile('file', $request->file('files'));
dd($request->file('file')->getMimeType());
$file['path'] = Storage::url($filePath);
$file['size'] = Storage::size($filePath);
$file['type'] = $request->file('file')->getMimeType();
return $file;
}
Эта проблема, по-видимому, уникальна тем, что я использую инфраструктуру Laravel, тогда как другие с этой проблемой используют ванильный PHP. Кроме того, файл excel, который другие могли сообщить нам как приложение/октетный поток, а не файл excel. Наконец, я полагаю, что это может быть проблема с методом предположения (), который вызывается методом getMethodType (). Кто-то с большим опытом работы с Laravel, вероятно, мог бы это подтвердить.