2015-09-06 11 views
5

फ़ाइल हटाने के संबंध में मेरे लार्वेल 5 वेब एप्लिकेशन से संबंधित एक समस्या है।लार्वेल 5 फ़ाइल हटाएं त्रुटि

मैं अपनी तालिका से संबंधित छवि फ़ाइल के साथ एक प्रविष्टि को हटाना चाहता हूं। यहां मेरी टेबल संरचना है। (/अपलोड/स्वामी/logocatagory_Computers & IT.png):

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

मैं brand_logo क्षेत्र की तरह में db और भंडारण छवि पथ के लिए 3 ब्रांडों गयी।

डेटाबेस से रिकॉर्ड हटाने पर मैं अपलोड फ़ोल्डर से छवि फ़ाइल को हटाना चाहता हूं। लेकिन जब मैं कार्रवाई निष्पादित करता हूं तो फ़ाइल हटा नहीं रही थी। यहां मेरा डिलीट नियंत्रक है।

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 
    } 

फ़ाइल मेरी निर्देशिका में मौजूद है और निर्देशिका 777 अनुमति है। !!

मैं भी नष्ट करने के लिए कोई रास्ता नहीं file.But !!! ..

मैं इस मुद्दे को कैसे हल कर सकते है भंडारण वर्ग की कोशिश की? किसी भी विचार ... :(

उत्तर

6

आप इसे गलत तरीके से कर रहे हैं। आप संभवतः URL से एक फ़ाइल को नष्ट नहीं कर सकते हैं, तो आप फ़ाइल आप यह मानते हुए फ़ाइल पथ नहीं यूआरएल

संपादित

प्रदान करनी चाहिए हटा public/uploads/masters/logocatagory_Computers में स्थित है करने के इच्छुक हैं आप ऐसा कर सकता है:

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

ऐप निर्देशिका में मेरे अपलोड फ़ोल्डर .. –

+0

मैंने अपना जवाब संपादित कर दिया है। सीधे शब्दों में app_path – Digitlimit

+0

धन्यवाद दोस्त के साथ public_path बदलें। बहुत बढ़िया। –

3

आप फ़ाइल बाहर है, तो भंडारण/ऐप्स /, भंडारण :: काम नहीं करता, /Config/Filesystems.php अपने 'स्थानीय डाल कोशिश बदलने 'base_path() पर और टिप्पणी डिफ़ॉल्ट storage_path(),

'disks' => [ 

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

फिर नियंत्रक

use Illuminate\Support\Facades\Storage; 

फिर सार्वजनिक funtion उपयोग भंडारण मॉडल

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

Laravel 5.1 में में। स्थानीय ड्राइवर का उपयोग करते समय, ध्यान दें कि सभी फ़ाइल ऑपरेशन आपकी कॉन्फ़िगरेशन फ़ाइल में परिभाषित मूल निर्देशिका से संबंधित हैं। डिफ़ॉल्ट रूप से, यह मान संग्रहण/ऐप निर्देशिका पर सेट है।/एप्लिकेशन

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

इस संग्रहण में file.txt हटाना होगा

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

आप चाहते हैं: इसलिए,

निम्न विधि भंडारण/ऐप्स/file.txt में एक फ़ाइल संग्रहीत करेंगे रूट निर्देशिका को बदलें, उदाहरण के लिए 'स्टोरेज/ऐप/अपलोड/' लें, आप फाइल सिस्टम सेट कर सकते हैं।निम्नलिखित के रूप में php:

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

इस भंडारण/ऐप्स/अपलोड निर्देशिका में file.txt हटाना होगा:

'disks' => [ 

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

तो यह निम्न विधि/ऐप्स/अपलोड/file.txt भंडारण में एक फ़ाइल संग्रहीत करेंगे ।

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

कुछ है कि मुझे आज काफी कुछ समय ले लिया यह पता लगाने की:

मामले आप फ़ाइलों कि Laravel के अपने संग्रह आवरण में लिपटे रहे हैं की एक सूची से हटाने के लिए कोशिश कर रहे हैं में, आप ->all() कॉल करने के लिए आवश्यकता हो सकती है अंतर्निहित सरणी उदाहरण प्राप्त करने के लिए:

// 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 
संबंधित मुद्दे