doudandui1592 2018-10-09 19:42
浏览 57
已采纳

为什么下载PDF的超链接不起作用? (没有文件)

I developed system for creating articles, each post except title and content consist possibility for uploading PDF.File names are stored in the database and they are written on the hyperlinks necessary to download the file.Now the problem is that when I want to download the file, it shows me a mistake in the browser. Did anyone knows what is a problem ?

Database

enter image description here

Location of PDF files

enter image description here

result

enter image description here

Posts Controller

<?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

Migration Create Post

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');
    }
}
  • 写回答

1条回答 默认 最新

  • dongxiezhuo8852 2018-10-09 19:49
    关注

    storage/app/public is not visible to the user

    You need to either move to public/... and/or create a symbolic link using this instructions: https://laravel.com/docs/5.7/filesystem#the-public-disk

    php artisan storage:link

    Then you replace

    <a href="./storage/app/public/upload/{{$post->file_name}}" download>
    

    With

    <a href="{{asset('storage/upload/'.$post->file_name)}}" download>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。