2016-05-16 5 views
9

मेरे पास सार्वजनिक/संपत्ति/मीडिया/फ़ोल्डरएथ कंट्रोलर के माध्यम से सुरक्षित संपत्ति/मीडिया फ़ोल्डर? लैरवेल 5.2

मैं इस फ़ाइल को सार्वजनिक रूप से नीचे की तरह एक्सेस कर सकता हूं।

http://localhost/myapp/public/Asset/Media/1/phpunit.xml 

इसी प्रकार एसेट/मीडिया फ़ोल्डर में अन्य फ़ोल्डर्स हैं जो फ्लाई पर बनाए जा रहे हैं।

कई फ़ाइलों को भी उन उप फ़ोल्डर में मौजूद हैं और यह भी एसेट/मीडिया फ़ोल्डर में मौजूद हैं

वहाँ कोई तरीका है, इस तरह के हैं कि यदि मैं एसेट/मीडिया फ़ोल्डर में किसी भी फाइल या किसी भी फाइल वर्तमान तक पहुँचने का प्रयास संपत्ति/मीडिया फ़ोल्डर के उप फ़ोल्डर में, मुझे लॉगिन पेज पर रीडायरेक्ट किया जाना चाहिए क्योंकि प्रमाणीकरण नहीं किया गया है?

मेरा मतलब है, क्या मैं इस फ़ोल्डर को सुरक्षित करने के लिए Auth मिडलवेयर का उपयोग कर सकता हूं? यदि हां, तो क्या यह एक वैध दृष्टिकोण है यदि हमें एंड्रॉइड ऐप से फ़ाइलों तक पहुंचना है?

उत्तर

1

मेरे नमूना यूआरएल यहाँ है:

http://domainname.com/storage/Asset/Media/1/filename.txt

मेरे मार्ग

Route::get('/storage/Asset/Media/{ID}/{file}', array(
    'as' => 'Files', 
    'uses' => 'User\Account\Media\[email protected]', 
)); 

नियंत्रक कार्रवाई विधि

public function DownloadMedia($ID) { 
    $headers = array(
     'Content-Type'  => 'application/octet-stream', 
     'Content-Disposition' => 'attachment; filename=somefile.txt"' 
    ); 

    return response()->download(base_path("storage/Asset/Media/1/somefile.txt")); 
} 

यहां महत्वपूर्ण बात यह है कि मैं किसी भी फ़ाइल प्रकार को डाउनलोड करने के लिए application/octet-stream का उपयोग कर सकता हूं।

1

यदि आप फ़ाइलों को सुरक्षित करना चाहते हैं, तो उन्हें लार्वेल से गुज़रना होगा। फ़ाइल को एक्सेस करते समय (पूर्ण पथ का उपयोग करके) लार्वेल के माध्यम से नहीं जाता है। आप एक मार्ग बनाने के द्वारा इस लक्ष्य को हासिल कर सकते हैं: इतना है कि आप का उपयोग करने की अनुमति की जांच करने के लिए प्रमाणीकरण का उपयोग कर सकते

Route::group(['middleware' => ['auth']], function() { 
    Route::get('/secure/file/{file_name}', '[email protected]'); 
} 

फिर, फ़ाइल का उपयोग करने के लिए एक नियंत्रक पैदा करते हैं। इसका यह भी मतलब है कि आप एक दुर्गम स्थान में फ़ाइल डाल दिया और Laravel फ़ाइल का उपयोग करना चाहिए PHP का उपयोग फ़ाइल तक पहुँचने का:

class FileController extends Controller { 
    public function file() 
    { 
     return Storage::get('path/to/phpunit.xml'); 
    } 
} 
+0

क्या यह एक वैध दृष्टिकोण है यदि हमें एंड्रॉइड ऐप से फ़ाइलों तक पहुंचना है? – Pankaj

+0

मुझे एंड्रॉइड ऐप के माध्यम से फ़ाइलों तक पहुंचने के लिए कोई समस्या नहीं दिखाई दे रही है, लेकिन यदि आप इस दृष्टिकोण का उपयोग कर बड़ी/बहुत सारी फाइलों की सेवा कर रहे हैं तो यह दृष्टिकोण वांछित से अधिक संसाधनों का उपभोग कर सकता है। –

1

उपयोग इसके लिए नीचे दिए गए मार्ग: सार्वजनिक फ़ोल्डर में

Route::get('/myapp/public/Asset/Media/{id}', function ($id) { 
    if (Auth::guest()){ 
     return Redirect::guest('login'); 
    }else{ 
     $img="/myapp/public/Asset/Media/".$id; 
      if(File::exists($img)) { 
     return Response::make($img, 200, array('content-type' => 'image/jpg')); 
      }else{ 
       return false; 
      } 
})->where('id', '.+'); 
+0

क्या यह वैध दृष्टिकोण है यदि हमें एंड्रॉइड ऐप से फ़ाइलों तक पहुंचना है? – Pankaj

+0

यह बिल्कुल काम नहीं कर रहा है। मैं अभी भी फ़ाइल को अज्ञात उपयोगकर्ता के रूप में देखने में सक्षम हूं – Pankaj

0

फ़ाइल होगा लार्वेल द्वारा उपयोग किए जाने वाले पुनर्लेखन नियमों के हर किसी के लिए सुलभ रहें, लार्वेल को तब भी नहीं बुलाया जाएगा जब कोई सार्वजनिक रूप से फ़ाइल तक पहुंचता है एर।

तो, आपको अपनी प्रतिबंधित फ़ाइलों को कहीं और, भंडारण फ़ोल्डर में रखना होगा, लेकिन आखिरकार इससे कोई फर्क नहीं पड़ता।

अपने सभी संपत्ति/मीडिया फ़ोल्डर को स्टोरेज फ़ोल्डर में डालने और फ्लाई पर अपना फ़ोल्डर बनाने वाले कोड को अपडेट करने के बाद (How storage works)।

एक FileController बनाएँ: इस मार्ग

पीएचपी

class FileController extends Controller { 
    public function __construct() { 
     $this->middleware('auth'); 
    } 

    public function downloadFile($filename) { 
     return response()->download(storage_path($filename), null, [], null); 
    } 
} 

कॉन्फ़िगर:

Route::get('file/{filename}', '[email protected]')->where('filename', '^[^/]+$'); 

यह है कि, अब केवल अपने प्रमाणीकृत उपयोगकर्ता thanx संपत्ति फ़ाइलों को डाउनलोड करने में सक्षम हो जाएगा मिडलवेयर ऑथ पर, यह एंड्रॉइड ऐप के लिए भी काम करेगा।

संबंधित मुद्दे