php 如何从存储器下载文件?

ct2axkht  于 2023-02-11  发布在  PHP
关注(0)|答案(3)|浏览(129)

我正在使用Laravel的文件存储系统,我试图触发下载响应通过浏览器下载我的文件,但它找不到正确的文件,而是下载我的文件页面视图脚本。我也设置了一个存储链接。
如有任何建议,我们将不胜感激。
File.blade.php

@extends('layouts.app')

 @section('content')

 <div class="container">
  <form action="{{route('upload')}}" method="POST" 
  enctype="multipart/form-data" name="formName"> 
{{csrf_field() }}
     <input type="file" name="file">
     <input type="submit" class="btn" name="submit">
</form>
<div class="row">
@foreach($files as $file)
   <a href="{{route('download',$file)}}" download="{{$file->name}}"> 
   {{$file->name}}</a>

 </div>
 </div>

 @endsection

下载功能

public function download($file){

    return response()->download(storage_path('/storage/app/files/'.$file));
 }

文件路由

Route::get('files', 'FileController@index')->name('upload');
  Route::post('files', 'FileController@store');
  Route::get('files/{file}', 'FileController@download')->name('download');
tpgth1q7

tpgth1q71#

从链接中删除此download="{{$file->name}}"
可以添加download作为html属性:

<a href="{!! route('download', $file->name) !!}" download>{{ $file->name }}</a>

但在这种情况下不需要,只需使用:

<a href="{!! route('download', $file->name) !!}">{{$file->name}}</a>

控制器中的response()->download()方法将生成一个响应,强制浏览器下载给定路径下的文件,因此请确保路径正确。
如果文件的格式为your-project-root-path/storage/app/files/,则可以用途:

return response()->download(storage_path('/app/files/'. $file));

如果文件位于your-project-root-path/storage/storage/app/files/中,请用途:

return response()->download(storage_path('/storage/app/files/'. $file));
eeq64g8w

eeq64g8w2#

我认为你传递的是文件对象而不是文件名到你的下载路径。

@extends('layouts.app')

 @section('content')

 <div class="container">
  <form action="{{route('upload')}}" method="POST" 
  enctype="multipart/form-data" name="formName"> 
{{csrf_field() }}
     <input type="file" name="file">
     <input type="submit" class="btn" name="submit">
</form>
<div class="row">
@foreach($files as $file)
   <a href="{{route('download',$file->name)}}" download> 
   {{$file->name}}</a>

 </div>
 </div>

 @endsection

尝试将{{route('download',$file)}}替换为{{route('download',$file-〉name)}}。还尝试将下载控制器替换为以下代码

public function download($file){
    return response()->download(storage_path('app/files/'.$file));
 }
u0njafvf

u0njafvf3#

公共函数jpg_download($id){ if(auth()-〉user()-〉下载计数〈5){

auth()->user()->increment('download_count');
        $data = DB::table('products')->where('id', $id)->first();
        $path = public_path('/storage/item/jpg/' . $data->jpg);
        return response()->download($path);
    }
    dd('Next Day Download');

}

相关问题