【问题标题】:Laravel 8: How to delete file in storage folderLaravel 8:如何删除存储文件夹中的文件
【发布时间】:2021-10-29 21:57:56
【问题描述】:

我目前有一个 API,它可以上传和删除课程的 PDF。你看,每当我删除 PDF 或使其为空时,它都不会删除我存储目录中的文件 [C:\xampp\htdocs\drv-api\storage\app\public\uploads]

我的课程 PDF 控制器:

    <?php

namespace App\Http\Controllers;

namespace App\Http\Controllers;
use App\Models\LessonPDF;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\File; 
use Illuminate\Support\Facades\Storage;

class LessonPDFController extends Controller
{
    public function FileUpload(Request $request, $id)
    {
        $rules=[  
            'file'=>'required|mimes:pdf',
        ];
        $validator = Validator::make($request->all(), $rules);
        if($validator->fails()){
            return response()->json($validator->errors(),400);
        }
        
        $file_mime_type = $request->file->getClientMimeType();
        // $original_file_name = $request->file->getClientOriginalName();

        $uploaded_files = $request->file->store('public/uploads/');
        // $uploaded_files = $request->file->storeAs('public/uploads/', $request->file->getClientOriginalName());

        $lesson = LessonPDF::find($id);
        $lesson->lesson_pdf = $request->file->hashName();

        $results = $lesson->save();
        if($results){
            return ["result"=>"PDF Added"];
        }else{
            return ["result"=>"PDF Not Added"];
        }

        // return [ "result"=>"$uploaded_files"];

    }


    public function DeletePDF($id)
    {    
        $lesson = LessonPDF::find($id);
        if(is_null($lesson)){
            return response()->json('Record not found!', 401);
        }

        // $image_path = public_path().'/'.$lesson->file; unlink($image_path);

        // $image_path = storage_path().'public/uploads/'.$lesson->file;
        unlink(storage_path('app/public/uploads/'.$lesson));

        if (File::exists($image_path)) {
            //File::delete($image_path);
            unlink($image_path);
        }
        // Storage::delete($lesson->lesson_pdf);
        $lesson->update(['lesson_pdf' => null]);
            return response('PDF Deleted', 200);

    }

    }

我的课程PDF 模型:

  <?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class LessonPDF extends Model
{
    public $table = "lesson";
    use HasFactory;

    protected $fillable = [
        'lesson_pdf',
    ];

    // protected $guarded = [];
}

我们将不胜感激任何形式的帮助。谢谢!

【问题讨论】:

  • 什么是课程->文件,散列名称?上传中保存的文件是散列名称还是原始名称?需要直接引用文件的路径。取消链接(storage_path('app/public/uploads/'myfile.pdf));
  • 它作为散列名称保存在我的存储中。
  • 取消链接(storage_path('app/public/uploads/'.$lesson->file));
  • 是的,抱歉,这行得通。我刚刚将file 更改为lesson_pdf。非常感谢

标签: laravel laravel-8


【解决方案1】:

试试这个

if ( file_exists(storage_path(('app/public/uploads/'.$lesson->file && $lesson->file !='')))) {
    unlink(storage_path(('app/public/uploads/'.$lesson->file)));
}

【讨论】:

  • 我收到了syntax error, unexpected token ";", expecting ")"
  • 我已经尝试过了,它只是在邮递员unlink(C:\xampp\htdocs\drv-api\storage\app/public/uploads/): Is a directory in file 中返回这个
【解决方案2】:

试试这个

use Illuminate\Support\Facades\Storage;
if (File::exists($image_path)) 
{         
  Storage::delete($image_path);
}

【讨论】:

    【解决方案3】:

    更新:

    我已经用这段代码修复了它:

     unlink(storage_path('app/public/images/'.$user->user_image));
    

    谢谢大家!

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2021-08-26
    • 1970-01-01
    • 2021-12-22
    • 2021-11-02
    • 2021-07-02
    • 2022-01-05
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多