Я не могу хранить загруженные изображения в публичном laravel - PullRequest
1 голос
/ 21 октября 2019

Я хочу загрузить несколько картинок и сохранить их в общедоступных / но они хранятся в хранилище / app / public

Я использовал php artisan link: хранилище до

И вот код:

public function store(Request $request)
    {
        $new_file_data=[
            'small_explain'=>$request->input('small_explain'),
            'title'=>$request->input('title'),
            'paragraph_one'=>$request->input('paragraph_one'),
            'paragraph_two'=>$request->input('paragraph_two'),
            'paragraph_list'=>$request->input('paragraph_list'),
            'paragraph_three'=>$request->input('paragraph_three'),
            'important_body'=>$request->input('important_body'),
            'quote'=>$request->input('quote'),
            'author_quote'=>$request->input('author_quote'),

             //image storage

            'index_image' => $request->file('index_image')->store('/public/Images'),
            'header_image' => $request->file('header_image')->store('/public/Images' ),
            'text_image' =>$request->file('text_image')->store('/public/Images'),

        ];
        Article::create($new_file_data);

    }

Ответы [ 3 ]

1 голос
/ 21 октября 2019

Прежде всего, добро пожаловать в StackOverflow.

Я думаю, вам следует глубже взглянуть на официальную документацию

Файл конфигурации файловой системы находитсяна config/filesystems.php. В этом файле вы можете настроить все ваши «диски». Каждый диск представляет определенный драйвер и место хранения.

Это ваша проблема. В вашем filesystems.php файле у вас есть следующая конфигурация (если вы не внесли каких-либо изменений):

return [

    /*
    |--------------------------------------------------------------------------
    | Default Filesystem Disk
    |--------------------------------------------------------------------------
    */

    'default' => env('FILESYSTEM_DRIVER', 'local'),

    // [...]

    /*
    |--------------------------------------------------------------------------
    | Filesystem Disks
    |--------------------------------------------------------------------------
    */

    'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

    ],

];

С этой конфигурацией Laravel возьмет в качестве корня для вашего хранилища папку storage/app и включит ваш пользовательскийпуть (в данном случае storage/app/public/Images). Если вы хотите что-то сохранить в общей папке, измените конфигурацию следующим образом.

return [

    /*
    |--------------------------------------------------------------------------
    | Default Filesystem Disk
    |--------------------------------------------------------------------------
    */

    'default' => 'public', // <-- Set the default disk

    // [...]

    /*
    |--------------------------------------------------------------------------
    | Filesystem Disks
    |--------------------------------------------------------------------------
    */

    'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        'public' => [
            'driver' => 'local',
            'root' => public_path(),    // <-- Change the default path to the public folder
            'url' => env('APP_URL'),    // <-- And the default URL
            'visibility' => 'public',
        ],

    ],

];

В любом случае, это не лучший способ. Как вы писали, вы также использовали команду php artisan storage:link, которая создает символическую ссылку из папки storage/app/public на путь public/storage. Таким образом, все файлы, хранящиеся в этой папке, будут видны с помощью таких команд, как asset('storage/my-public-image.jpg').

. Кроме того, Laravel имеет свою собственную функцию $url = Storage::url('file.jpg');, которая автоматически создает URL на основеустановленный вами конфиг (параметр url в конфигурации диска).

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

0 голосов
/ 22 октября 2019

Если вы хотите использовать функцию магазина, следуйте ответам @llGala. Но если вы хотите использовать функцию перемещения, вы можете использовать ее, как показано ниже, чтобы игнорировать сохранение как .temp

if ($request->image) {
            $file=$request->File('image');
            $ext=$file->getClientOriginalExtension();
            $filename=$user->username . '.' . $ext;
            $file->move('images/',$filename);
            $user->image=$filename;
        }
0 голосов
/ 21 октября 2019

Сначала запустите это в вашем cmd

  php composer require intervention/image

Для получения дополнительной информации перейдите по этой ссылке [http://image.intervention.io/getting_started/installation] Используйте этот метод

public function store(Request $request)
    {
        $this->validate($request, [
            'small_explain' => 'required',
            'title' => 'required',
            'paragraph_one' => 'required',
            'paragraph_two' => 'required',
            'paragraph_list' => 'required',
            'paragraph_three' => 'required',
            'important_body' => 'required',
            'quote' => 'required',
            'author_quote' => 'required',

            'index_image' => 'required|mimes:jpeg,png,bmp',
        ]);
        $image = $request->file('index_image');
        $slug = str_slug($request->title);

        if(isset($image)) {

            $currentDate = Carbon::now()->toDateString();

            $imagename = $slug.'-'.$currentDate.'-'.uniqid().'.'.$image->getClientOriginalExtension();

            if(!Storage::disk('public')->exists('upload')) {
                Storage::disk('public')->makeDirectory('upload');
            }

            $postImage = Image::make($image)->resize(1600, 1066)->save($imagename);
            Storage::disk('public')->put('upload/'.$imagename, $postImage);
        } else {
            $imagename = 'default.png';
        }
        $article = new Article;
        $article->images = $imagename;
        $article->small_explain = $request->small_explain;
        $article->paragraph_one = $request->paragraph_one;
        $article->paragraph_two = $request->paragraph_two;
        $article->paragraph_list = $request->paragraph_list;
        $article->paragraph_three = $request->paragraph_three;
        $article->important_body = $request->important_body;
        $article->quote = $request->quote;
        $article->author_quote = $request->author_quote;

        $article->save();
        return redirect(route('articles.index'));
    }

Если ваша проблема не решенаотправь мне сообщение

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