Я пытаюсь создать небольшое приложение в VueJs в качестве внешнего интерфейса и Laravel в качестве серверного интерфейса, куда я загружаю файлы в моем разделе администратора в свой aws-s3 при загрузке файлов, которые я храню ссылка на этот файл в базе данных. Каждое действие поддерживается вызовами api, теперь я хочу предоставить возможность этих загрузок моим конечным пользователям, поэтому я вызываю axios примерно так:

downloadPDF(docs){
    const documents = {
        document: docs
    }
    axios.post('api/documents-download', documents, {headers: getHeader()}).then(response => {
        if(response.status === 200)
        {
            console.log('Downloaded')
        }
    })
},

И в моем контроллере у меня что-то вроде этого:

public function download(Request $request)
{
    $headers = [
        'Content-Type' => 'application/pdf',
        'Content-Description' => 'File Transfer',
        'Content-Disposition' => "attachment; filename=filename.pdf",
    ];

    return response()->download($request->document, 'filename.pdf', $headers);
}

Но это выдает мне ошибку:

Файл "https://s3-us-west-2.amazonaws.com/noetic-dev/2_Project/shiven-affordable-housing-surat/3_Document/Form+1/Form1.pdf "делает не существует

Этот файл явно существует и опубликован, поскольку вы можете видеть, что URL-адрес выше показывает документы как связанные.

Помогите мне с этим. Спасибо

1
Nitish Kumar 23 Окт 2018 в 21:28

2 ответа

Лучший ответ

Я помню, как реализовал это в моем проекте .. позвольте мне поделиться с вами образцом кода ... Laravel уже предоставляет подробную информацию о s3Storage в документации

Код:

use Illuminate\Support\Facades\Response as Download;

public function download_config(Config $config)
    {
        $headers = [
            'Content-Type'        => 'Content-Type: application/zip',
            'Content-Disposition' => 'attachment; filename="'. $config->name .'"',
        ];

        return Download::make(Storage::disk('s3')->get($config->path), Response::HTTP_OK, $headers);
    }

Я предполагаю, что вы можете хранить $config->path (путь к файлу) это в своей базе данных. Чтобы узнать больше, посетите это

2
Salman Zafar 23 Окт 2018 в 19:16

Этот код работал как шарм для загрузки с S3 в Laravel 7:

// $filePath should look like this: some-directory/filename.zip
return redirect(Storage::disk('s3')->temporaryUrl(
                    $filePath,
                    now()->addHour(),
                    ['ResponseContentDisposition' => 'attachment']
                ));

Кредиты для: https://sutherlandboswell.com/force- файлов загрузки , из - АМС - s3 - в - Laravel /

2
Aleksandr Kopelevich 19 Апр 2020 в 13:15
52955643