Laravel не может найти сохраненный файл - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь встроить видео в вид, но получаю 404, и я не совсем уверен, почему.Я создал новый проект laravel, а затем сделал php artisan storage: link.На этом сайте не нужно загружать файлы, поэтому я просто вставил файл в каталог хранения:

storage/app/public/product1/courses/announcements/Manager_Creating_an_Announcement.mp4

Мой файл миграции:

public function up()
{
    Schema::create('courses', function (Blueprint $table) {
        $table->increments('id');
        $table->timestamps();
        $table->string('title')->nullable($value = true);
        $table->string('certifcation')->nullable($value = true);
        $table->string('video')->nullable($value = true);
    });
}

Гдевидео - это путь

My CourseCountroller

<?php

namespace App\Http\Controllers;

use App\Course;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class CourseController extends Controller
{
/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
public function index($id)
{
    $course = Course::findOrFail($id);

    //dd(Storage::allFiles('public'));
    //this returns an array with: 0 => "public/product1/courses/announcement/Manager_Creating_an_Announcement.mp4"
    return view('course.index', compact('course', $course));
}

Вид, по которому пользователь нажимает, чтобы перейти на этот курс, выглядит следующим образом:

<a href="/product/course/1">Manager Creating an Announcement</a>

Маршрут в web.php выглядит так:

Route::get('/product/course/{course}', 'CourseController@index');

И вид курса выглядит так:

@extends('layouts.app')

@section('content')

@php

@endphp

<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-12">
            <div class="card">
                <div class="card-header">Welcome to your course: {{$course->title}}</div>

                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif

                    <h3>Watch the video first!</h3>
                    <div class="embed-responsive embed-responsive-16by9">
                        <iframe class="embed-responsive-item" src="{{asset($course->video)}}"></iframe>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>



@endsection

В тинкере курс выглядиткак это:

>>> Course::all();
[!] Aliasing 'Course' to 'App\Course' for this Tinker session.
=> Illuminate\Database\Eloquent\Collection {#2921
     all: [
       App\Course {#2922
         id: 1,
         created_at: null,
         updated_at: null,
         title: "Manager creating an Announcement",
         certifcation: "Announcements",
         video: "public/csm/courses/announcement/Manager_Creating_an_Announcement.mp4",
       },
     ],
   }

Ошибка 404, страница не найдена.Когда я проверяю элемент, я вижу:

<iframe src="http://127.0.0.1:8000/public/product1/courses/announcement/Manager_Creating_an_Announcement.mp4" class="embed-responsive-item"></iframe>

Я также попробовал его с тегом video вместо встраивания, но не пошел.Любая помощь будет высоко ценится!

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Если он находится в хранилище, вы запустили php artisan storage:link, вы должны иметь к нему доступ следующим образом:

"/storage/product1/courses/announcements/Manager_Creating_an_Announcement.mp4"
0 голосов
/ 21 сентября 2018

Публичный диск

Публичный диск предназначен для файлов, которые будут общедоступными.По умолчанию публичный диск использует локальный драйвер и хранит эти файлы в хранилище / app / public.Чтобы сделать их доступными из Интернета, вы должны создать символическую ссылку из public / storage в storage / app / public.В соответствии с этим соглашением ваши общедоступные файлы будут храниться в одном каталоге, который может быть легко использован всеми пользователями при использовании систем развертывания с нулевым временем простоя, таких как Envoyer.

Чтобы создать символическую ссылку, вы можете использовать команду storage: link Artisan:

php artisan storage:link

Конечно, после сохранения файла и создания символической ссылки вы можете создать URL-адрес для файлов с помощью помощника ресурса:

echo asset('storage/file.txt');

https://laravel.com/docs/5.7/filesystem#the-public-disk

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