Я разработал систему для создания статей, каждый пост, кроме заголовка и содержимого, содержит возможность загрузки PDF. Имена файлов хранятся в базе данных и пишутся по гиперссылкам, необходимым для загрузки файла. Теперь проблема в том, что когда я хочучтобы скачать файл, он показывает мне ошибку в браузере.Кто-нибудь знает в чем проблема?
База данных
Расположение файлов PDF
результат
Контроллер сообщений
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
//including post model to controller
use App\Post;
//if we want to use sql syntax for queries
use DB;
class PostsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//list articles by desc row
$posts= Post::orderby('created_at', 'desc')->paginate(3);
return view('posts.index')-> with('posts', $posts);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('posts.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$this -> validate($request,[
'title' => 'required',
'content' => 'required'
]);
// Handle File Upload
if($request->hasFile('image')){
// Get filename with the extension
$filenameWithExt = $request->file('image')->getClientOriginalName();
// Get just filename
$filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);
// Get just ext
$extension = $request->file('image')->getClientOriginalExtension();
// Filename to store
$fileNameToStore= $filename.'_'.time().'.'.$extension;
// Upload Image
$path = $request->file('image')->storeAs('public/upload', $fileNameToStore);
} else {
$fileNameToStore = 'noimage.jpg';
}
//create new post
$post= new Post;
$post -> title = $request -> input('title');
$post -> content = $request -> input('content');
$post->file_name = $fileNameToStore;
$post -> save();
return redirect('/posts') ->with('success', 'Post Created');
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//list post while we enter through link
$post= Post::find($id);
return view('posts.show')-> with('post', $post);
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
$post= Post::find($id);
return view('posts.edit')-> with('post', $post);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$this -> validate($request,[
'title' => 'required',
'content' => 'required'
]);
//create new post
$post= Post::find($id);
$post -> title = $request -> input('title');
$post -> content = $request -> input('content');
$post -> save();
return redirect('/posts') ->with('success', 'Post Updated');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$post= Post::find($id);
$post -> delete();
return redirect('/posts') ->with('success', 'Post Removed');
}
}
show.blade.php
@extends('layouts.app')
@section('content')
<h1>{{$post->title}}</h1>
<div>
{{$post->content}}
</div>
<p><a href="./storage/app/public/upload/{{$post->file_name}}" download>Download the pdf</a></p>
<small>Written on {{$post->created_at}}</small>
<a href="/posts" class="btn btn-default">Return</a>
@endsection
Миграция Создать сообщение
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePostsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->mediumText('content');
$table->string('file_name')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('posts');
}
}