Как поделиться файлами в каталоге хранилища в laravel (основная настройка) и lumen (настройка sudomain)

Я работаю над проектом на основе laravel+lumen. Я делаю основную настройку, которая будет основана на веб-интерфейсе Laravel 5.2 и поддомене (api.domain.com) для обработки запросов API с мобильных устройств. Пользователи будут загружать множество файлов (в основном изображения) как из мобильного приложения, так и из Интернета. И они будут храниться в папке хранилища, которая не будет видна публично. Но тогда есть две проблемы.

  1. Как разделить папку хранилища между двумя установками? Я думаю о том, чтобы хранить файлы на отдельном сервере, чтобы решить эту проблему.
  2. Поскольку папка хранилища не будет общедоступна, как мне получить файл?

person Pawan Kumar    schedule 24.07.2016    source источник
comment
Папка хранения, в которой хранится кеш и просмотры?   -  person Niklesh Raut    schedule 24.07.2016
comment
@Rishi Да, но я хочу поделиться только медиа-папкой, которую я буду создавать   -  person Pawan Kumar    schedule 24.07.2016
comment
Вы не можете получить доступ к изображениям по URL-адресу? Из другого проекта   -  person Niklesh Raut    schedule 24.07.2016
comment
Поскольку файлы загружаются пользователями, я хочу, чтобы они были частными, и будет предоставлен только относительный путь.   -  person Pawan Kumar    schedule 24.07.2016


Ответы (1)


У вас может быть специальный маршрут, который считывает и возвращает изображение. Например, простой путь закрытия, подобный этому: существует два подхода в зависимости от конфиденциальности ваших файлов, вы можете использовать любой из нижеприведенных.

1) Использование выделенного контроллера для обслуживания изображений:
Контроллер:

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Storage;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Response;


class FileController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

    public static function getFile($fileName){
        $path = storage_path() . '/' . $filename;

        if(File::exists($path)){
            return Response::download($path);
        }
        else
            abort(404);
    }
}

Маршрут

Route::get('/file/{file_name}','FileController@getFile');

Теперь вы можете получить доступ к файлу с именем, скажем, abc.jpg по этому URL-адресу /file/abc.jpg

2) Используя символическую ссылку
Если ваши файлы не требуют аутентификации или какой-либо обработки, это метод является лучшим и быстрым по отношению к контроллеру
Создайте символическую ссылку между подпапкой в ​​вашем каталоге хранилища и общедоступным каталогом.
В Linux вы можете использовать следующую команду:

ln -s /path_to_storage_directory/file /path_to_public_directory/files

В Windows используйте следующую команду:

mklink /j /path_to_storage_directory/file /path_to_public_directory/files

В Windows, если вы не хотите использовать CMD, это отдельное приложение для создания символических ссылок: Symlinker

person jaysingkar    schedule 24.07.2016
comment
Извините, я не понял, что вы хотите поделиться файлами между двумя установками. В этом случае вам лучше использовать символические чернила. Просто замените путь к общедоступному каталогу на каталог хранения вашего второго проекта. - person jaysingkar; 25.07.2016