В настоящее время я могу загрузить файл между ними, но возникают проблемы, когда файл может иметь любой формат. Например, на сайте у пользователя есть возможность загружать «ресурс», который может быть любым, начиная от PDF, до JPG и т. Д.
Я хочу иметь возможность установить имя файла на внешнем интерфейсе вVue к тому, что возвращается из бэкэнда в Laravel (например, soccer_video.mp4, gun.jpg и т. Д.)
Функция Laravel:
public function download($id)
{
try {
$asset = Asset::findOrFail($id);
} catch(ModelNotFoundException $e) {
return response()->json(['status' => 'error', 'data' => null, 'message' => 'Asset not found'], 404);
}
if(empty($asset->file)) {
return response()->json(['status' => 'error', 'data' => null, 'message' => 'This asset does not have an associated file'], 500);
}
$extension = pathinfo($asset->file, PATHINFO_EXTENSION);
if(empty($extension)) {
return response()->json(['status' => 'error', 'data' => null, 'message' => 'This file extension of this asset could not be determined'], 500);
}
$file_name = $asset->name.'.'.$extension;
return Storage::download($asset->file, $file_name);
}
Функция Vue:
download(id) {
return axios.get(process.env.API_URL + `asset-download/${id}`, { responseType: 'blob' })
.then(response => {
return response;
})
},
download: function() {
this.loading_download_asset = true;
AssetsApi.download(this.asset.id)
.then(response => {
const blob = new Blob([response.data], { type: response.data.type })
console.log(response.type)
let link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = 'test.jpg';
link.click();
})
.catch(error => {
console.log(error);
this.$logRocket.captureException(error);
})
.finally(() => {
this.loading_download_asset = false;
});
},
Я попытался получить имя файла из заголовка, используя:
response.request.getResponseHeader('Content-Disposition');
Но получаю ошибку:
"Отказался получить небезопасный заголовок« Content-Disposition »
При просмотре вкладки сети я вижу «расположение содержимого»:
![a busy cat](https://i.imgur.com/1M0npSa.png)
Как можно получить доступ к имени, заданному в бэкэнде