Получить файлы с путем к серверу в приложении, а не через http?

У меня есть область загрузки для моих клиентов, файлы которой должны быть личными, а не общедоступными. Как я могу получить эти файлы для предварительного просмотра в приложении из-за того, что они не являются общедоступными? Есть ли другой способ получить его прямо с сервера?

хранить вне webroot, обслуживать скриптом.

user10226920 04.11.2018 21:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Да, вы можете обслуживать файлы, не делая их общедоступными.

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

Например:

Route::get('files/{file}', function () {
    // authorize the request here
    return response()->file();
});

Есть много встроенных способов обслуживания файлов. Вот четыре, на которые я бы порекомендовал посмотреть:

// For files on the local filesystem:
response()->file()
response()->download()

// For files that may be in an external storage system (SFTP, etc.)
Storage::response()
Storage::download()

Для файлов, хранящихся во внешней системе (например, Amazon S3), которая поддерживает временные URL-адреса, иногда лучше сгенерировать URL-адрес для файла, чем обслуживать его непосредственно из вашего приложения. Обычно это можно сделать с помощью Storage::temporaryUrl().

Ответ принят как подходящий

Если вы работаете с изображениями:

Route::get('/file/download', function() {
    // get your filepath
    $filepath = 'path/to/image/image.png';
    return Response::download($filepath);
});

Тогда, на ваш взгляд:

<img src = "{{url('/file/download')}}" class = "rounded-circle" />

Для любого другого файла:

Route::get('/file/download', function() {
    // get your filepath
    $filepath = 'path/to/file/essay.docx';
    return Response::download($filepath);
});

Ваше мнение:

<a href = "{{url('/file/download/')}}">Download</a>

При желании вы можете использовать контроллер:

namespace MyNamespace;

use Illuminate\Routing\Controller;

class FilesController extends Controller
{
    public function downloadFile()
    {
        // get your filepath
        $filepath = 'path/to/file/essay.docx';
        return Response::download($filepath);
    }
}

Тогда ваше определение маршрута будет выглядеть так:

Route::get('/file/download', ['as' => 'file.download', 'uses' => 'MyNamespace\FilesController@downloadFile']);

И ваш взгляд:

<a href = "{{route('file.download')}}">Download</a>

Другие вопросы по теме