#laravel #vue.js #download #axios
#laravel #vue.js #Скачать #axios
Вопрос:
Я пытаюсь принудительно загружать файлы (не обязательно PDF!) с помощью извлечения vue из laravel.
Я везде огляделся, и, похоже, мне удается найти методы только тогда, когда я знаю, что это всегда будет PDF. Но что, если может быть несколько разных типов файлов.
Ответ №1:
С помощью laravel вы можете написать функцию загрузки. Может быть
$file_url = 'http://www.myremoteserver.com/file.exe';
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename="" . basename($file_url) . """);
readfile($file_url);
Примером загрузки файла является файл docx, тогда тип содержимого — mime docx => application/vnd.openxmlformats-officedocument.wordprocessingml.document
С помощью vue вы можете использовать axios для загрузки файла.
Ответ №2:
Я использую этот код, чтобы он загружал любые файлы.(вы должны настроить его под свои нужды):
для компонента vuejs:
axios.get( 'user/getTicketFile', {
params: {
number: this.$route.params.id,
name: item
},
responseType: 'blob'
})
.then(function (r)
{
const url = window.URL.createObjectURL(new Blob([r.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'file.' r.headers.ext); //or any other extension
document.body.appendChild(link);
link.click();
//hide loader
i.loader = false
});
},
и это пример серверной функции laravel:
public function getTicketFile(Request $request)
{
$number = $request['number'];
$name = $request['name'];
$filePath = storage_path( 'app/tickets/'.$number.'/'.$name );
if( file_exists($filePath) )
{
$headers = array(
'ext' => pathinfo($name, PATHINFO_EXTENSION),
);
return response()->download($filePath, '', $headers);
}
}
}