laravel 获取后台资源和下载后台资源文件

版权声明:转载请注明博主地址 https://blog.csdn.net/weixin_43885417/article/details/85017991

我们写项目的时候,前台想要访问后台资源,一般直接是把public文件夹下的文件路径返回给前台。
但是,需要把一些重要的,对外不可见的私密文件,需要放到laravel的storage文件夹里。但是这个时候就需要,后台给前台获取后台资源的接口。让前台可以访问。
你会看到,我的代码里有判断,主要是为了避免前台请求不存在的资源。并且,我在后台把前台传来的请求资源路径,进行拆分。然后,下载资源,返回给前台。
第一个方法,是展示资源给用户,第二个方法,直接让用户直接下载到本地。
注意:文件路径,一定要是绝对路径
下面直接上代码:

<?php

namespace App\Http\Controllers\ScientificController;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
class AccessFileController extends Controller
{
    /**请求laravel/storage/app/data/下的文件资源
     * @param Request $request
     * @return BinaryFileResponse
     */
    public function showFile(Request $request){
        $disk       = $request->disk;
        $subjection = $request->subjection;
        //把传来的数据用'/'分割
        $fileName   = explode('/',$subjection);                           
        if(count($fileName) != 2) return redirect('showemptyview');
        //取出文件的名字
        $fileName = $fileName[1]; 
        //判断请求的文件是否存在
        if(!file_exists(storage_path('app/data/'.$disk.'/'.$subjection))){
        //返回给用户空资源的视图
            return redirect('showemptyview');                                        
        }
        $temp_path  = tempnam(sys_get_temp_dir(), $fileName);
        file_put_contents($temp_path, Storage::disk($disk)->get($subjection));
        $downResponse = new BinaryFileResponse($temp_path);
        return $downResponse;
    }
    /**从Storage文件下,下载文件
     * @param Request $request
     * @return BinaryFileResponse
     */
    public function downloadFile(Request $request){
    //拼接自己文件的绝对路径
        $file = 'app/data/'.$request->file;      
        //判断文件是否存在
        if(!file_exists(storage_path($file))) return redirect('showemptyview');
        return response()->download(storage_path($file));
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43885417/article/details/85017991
今日推荐