#laravel #vue.js #inertiajs
#ларавель #vue.js #inertiajs
Вопрос:
Я загрузил файл в базу данных и создал ссылку на хранилище, используя «php artisan storage: link», и все работает отлично, но когда я хочу загрузить файл, я сталкиваюсь с этой ошибкой
вот мой код
маршрут
Route::get('/download/{id}', [AppHttpControllersSubjectController::class, 'downloadFile'])->name('subject.download');
Vue.js
<inertia-link :href="'/download/' slide.id" class="rounded-lg bg-gray-200 px-4 py-1">
<Icon name="download"></Icon>
</inertia-link>
контроллер
public function downloadFile($id) {
$file = Upload::find($id);
$subjectCode = $file->subject()->get()->map->only('name','code')->first()['code'];
$subjectName = $file->subject()->get()->map->only('name','code')->first()['name'];
return response()->download(storage_path('app/public/documents/'.Str::upper($subjectCode.'_'.$subjectName).'/'.$file->file), 'public');
}
Ответ №1:
заменить
<inertia-link :href="'/download/' slide.id" class="rounded-lg bg-gray-200 px-4 py-1">
<Icon name="download"></Icon>
</inertia-link>
Для
<a :href="'/download/' slide.id" class="rounded-lg bg-gray-200 px-4 py-1">
<Icon name="download"></Icon>
</a>
тогда он не будет обрабатываться inertia
и позволит вам загрузить файл
Комментарии:
1. Спасибо, что вы ответили, что этот метод работает, но мне нужно знать, почему он не сработал с inertia.js связана ли эта ошибка с inertia.js ?
2.
inertia
ссылка действует как вызов ajax для получения следующей страницы, например, pjax, поэтому загрузка здесь не сработает, попробуйте получить следующую страницу, она отличается<a>
от тега3. Я боролся с этой проблемой и мог найти что-нибудь о проблеме, пока не начал рассуждать о том, что Инерция может иметь какое-то отношение, к сожалению, документы по инерции не дают никаких разъяснений по этому поводу.