2015-09-06 33 views
5

Có sự cố liên quan đến ứng dụng web Laravel 5 của tôi liên quan đến việc xóa tệp.Laravel 5 Tệp Xóa Lỗi

Tôi muốn xóa mục nhập khỏi bảng của mình bằng tệp hình ảnh tương ứng. Đây là cấu trúc bảng của tôi.

Schema::create('master_brands',function($table){ 
     $table->increments('pk_brand_id'); 
     $table->string('brand_name'); 
     $table->string('brand_logo'); 
     $table->timestamps(); 
    }); 

tôi đã thêm 3 thương hiệu để đường dẫn hình ảnh db và lưu trữ trong brand_logo lĩnh vực như: (/uploads/thầy/logocatagory_Computers & IT.png).

Khi xóa bản ghi khỏi cơ sở dữ liệu, tôi cũng muốn xóa tệp hình ảnh khỏi thư mục tải lên. Nhưng Tệp không xóa khi tôi thực hiện tác vụ xóa. đây là bộ điều khiển xóa của tôi.

public function branddelete($id) 
    { 
    $filename = DB::table('master_brands')->where('pk_brand_id', $id)->get(); 
    $filname = url()."/app".$filename[0]->brand_logo; 
    File::delete($filname); // http://localhost/genie-works/devojp/app//uploads/masters/logocatagory_Computers & IT.png 
    } 

Tệp này tồn tại trong thư mục của tôi và thư mục có quyền 777. !!

Tôi cũng đã thử các lớp lưu trữ xóa file.But không có cách nào !!! ..

Làm thế nào tôi có thể giải quyết vấn đề này? Bất cứ ý tưởng ... :(

Trả lời

6

Bạn đang làm nó một cách sai lầm. Bạn không thể nào xóa một tập tin từ URL, bạn phải cung cấp tập tin PATH không URL

Sửa

Giả sử các tập tin bạn muốn xóa nằm ở public/uploads/masters/logocatagory_Computers bạn có thể làm điều này:

public function branddelete($id) 
{ 
    $filename = DB::table('master_brands')->where('pk_brand_id', $id)->get(); 
    $filname = $filename[0]->brand_logo; 
    //example it.png, which is located in `public/uploads/masters/logocatagory_Computers` folder 
    $file_path = app_path("uploads/masters/logocatagory_Computers/{$filname}"); 

    if(File::exists($file_path)) File::delete($file_path); 
} 
+0

thư mục tải lên của tôi trong thư mục ứng dụng .. –

+0

Tôi đã chỉnh sửa câu trả lời của mình. Chỉ cần thay thế public_path bằng app_path – Digitlimit

+0

nhờ dude. Tuyệt vời. –

3

Nếu bạn có các tập tin ra lưu trữ/app /, lưu trữ :: không hoạt động, thay đổi /Config/Filesystems.php thử đặt 'địa phương của bạn 'tại base_path() và bình luận default_path(),

'disks' => [ 

    'local' => [ 
     'driver' => 'local', 
     'root' => base_path(), 
     // 'root' => storage_path('app'), 
    ], 

Sau đó, trong điều khiển

use Illuminate\Support\Facades\Storage; 

Sau đó, sử dụng Chức năng công cộng lưu trữ mẫu

$path= 'uploads/masters/'; 
Storage::delete($path . $filname); 
0

Trong Laravel 5.1. Khi sử dụng trình điều khiển cục bộ, lưu ý rằng tất cả các thao tác tệp liên quan đến thư mục gốc được xác định trong tệp cấu hình của bạn. Theo mặc định, giá trị này được đặt thành thư mục lưu trữ/ứng dụng. Do đó,

các phương pháp sau đây sẽ lưu trữ một tập tin trong lưu trữ/app/file.txt:

Storage::put('file.txt', 'Contents'); 

này sẽ xóa file.txt trong lưu trữ/app

Storage::delete('file.txt'); 

Nếu bạn muốn thay đổi thư mục gốc, hãy chọn 'lưu trữ/ứng dụng/tải lên/' chẳng hạn, bạn có thể đặt hệ thống tệp.php như sau:

'disks' => [ 

    'local' => [ 
     'driver' => 'local', 
     'root' => storage_path('app/uploads/'), 
    ], 
    ... 

sau đó phương pháp sau này sẽ lưu trữ một tập tin trong lưu trữ/app/uploads/file.txt:

Storage::put('file.txt', 'Contents'); 

này sẽ xóa file.txt trong lưu trữ/app/uploads thư mục .

Storage::delete('file.txt'); 
0

Cái gì đó đã cho tôi một thời gian khá lâu để tìm ra ngày hôm nay:

Trong trường hợp bạn đang cố gắng để xóa một danh sách các tập tin được bọc trong Bộ sưu tập wrapper riêng Laravel, bạn có thể cần phải gọi ->all() để lấy ví dụ mảng cơ bản:

// The following is an example scenario 
$files = Storage::list('downloads'); 

$collection = collect($files)->filter(function ($file) { 
    return str_contains($file, 'temp'); 
}); 

Storage::delete($collection->all()); // Note the "all()" call here