Laravel

#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. Я боролся с этой проблемой и мог найти что-нибудь о проблеме, пока не начал рассуждать о том, что Инерция может иметь какое-то отношение, к сожалению, документы по инерции не дают никаких разъяснений по этому поводу.