【发布时间】: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。非常感谢