Получить файлы с указанием пути к серверу в приложении, а не через http? - PullRequest
0 голосов
/ 04 ноября 2018

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

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

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

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>
0 голосов
/ 04 ноября 2018

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

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

Например:

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().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...