php تحميل الملفات في laravel باستخدام Response:: تنزيل



laravel-4 laravel-routing (6)

في تطبيق Laravel أحاول تحقيق زر داخل العرض يمكن أن يسمح للمستخدم بتنزيل الملف دون الانتقال إلى أي عرض آخر أو مسار الآن لدي مشكلتين: (1) أسفل وظيفة الرمي

The file "/public/download/info.pdf" does not exist

(2) يجب ألا ينزل زر التنزيل إلى المستخدم إلى أي مكان ، بل يقوم فقط بتنزيل الملفات على نفس طريقة العرض ، الإعدادات الحالية الخاصة بي ، توجيه عرض "/ تنزيل"

إليك كيف أحاول تحقيق:

زر:

  <a href="/download" class="btn btn-large pull-right"><i class="icon-download-alt"> </i> Download Brochure </a>

طريق :

Route::get('/download', '[email protected]');

مراقب :

public function getDownload(){
        //PDF file is stored under project/public/download/info.pdf
        $file="./download/info.pdf";
        return Response::download($file);
}

Answer #1

في الإجابة المقبولة ، بالنسبة إلى Laravel 4 ، يتم إنشاء مصفوفة رؤوس الرسائل بشكل غير صحيح. استعمال:

$headers = array(
  'Content-Type' => 'application/pdf',
);

Answer #2

يقترح عدد قليل من هذه الحلول الرجوع إلى public_path () من تطبيق Laravel لتحديد موقع الملف. في بعض الأحيان ، ستحتاج إلى التحكم في الوصول إلى الملف أو توفير مراقبة في الوقت الفعلي للملف. في هذه الحالة ، ستحتاج إلى الحفاظ على خصوصية الدليل والحد من الوصول باستخدام طريقة في فئة وحدة التحكم. يجب أن تساعد الطريقة التالية في:

public function show(Request $request, File $file) {

    // Perform validation/authentication/auditing logic on the request

    // Fire off any events or notifiations (if applicable)

    return response()->download(storage_path('app/' . $file->location));
}

هناك مسارات أخرى يمكنك استخدامها أيضًا ، كما هو موضح في وثائق داعم Laravel


Answer #3

تنزيلات الملفات بسيطة للغاية في Laravel 5 .

كما ذكرAshwani Laravel 5 يسمح بتنزيل الملفات مع response()->download() لإرجاع الملف للتنزيل. لم نعد بحاجة إلى العبث بأي رؤوس. لإرجاع ملف نقوم ببساطة بما يلي:

return response()->download(public_path('file_path/from_public_dir.pdf'));

من داخل وحدة تحكم.

قابلة لإعادة الاستخدام تنزيل الطريق / المراقب المالي

الآن دعونا نجعل مسار تنزيل الملف القابل لإعادة الاستخدام والتحكم حتى نتمكن من تخزين أي ملف في دليل public/files .

إنشاء وحدة التحكم:

php artisan make:controller --plain DownloadsController

إنشاء الطريق في app/Http/routes.php :

Route::get('/download/{file}', '[email protected]');

جعل طريقة التنزيل في app/Http/Controllers/DownloadsController :

class DownloadsController extends Controller
{
  public function download($file_name) {
    $file_path = public_path('files/'.$file_name);
    return response()->download($file_path);
  }
}

الآن ببساطة يسقط بعض الملفات في الدليل public/files ويمكنك /download/filename.ext عن طريق ربط إلى / /download/filename.ext :

<a href="/download/filename.ext">File Name</a> // update to your own "filename.ext"

إذا سحبت حزمة Html في Laravel Collective ، يمكنك استخدام واجهة Html:

{!! Html::link('download/filename.ext', 'File Name') !!}

Answer #4

أعتقد أنه يمكنك استخدامها

$file= public_path(). "/download/info.pdf";

$headers = array(
        'Content-Type: ' . mime_content_type( $file ),
    );

مع هذا تأكد من أن قوات الدفاع الشعبي.


Answer #5

جرب هذا.

public function getDownload()
{
    //PDF file is stored under project/public/download/info.pdf
    $file= public_path(). "/download/info.pdf";

    $headers = array(
              'Content-Type: application/pdf',
            );

    return Response::download($file, 'filename.pdf', $headers);
}

لن يعمل "./download/info.pdf" كما يجب عليك إعطاء المسار الفعلي الكامل.

تحديث 20/05/2016

يمكن استخدام المستخدمين Laravel 5 أو 5.1 أو 5.2 أو 5. * الطريقة التالية بدلاً من واجهة Response . ومع ذلك ، ستعمل إجابتي السابقة لكل من Laravel 4 أو 5. (تغيير بنية مصفوفة $header إلى الصفيف النقابي => - تم حذف القولون بعد "Content-Type" - إذا لم نقم بهذه التغييرات ، فستكون الرؤوس بعد ذلك تمت إضافتها بطريقة خاطئة: سيتم بدء اسم رأس الصفحة من 0،1 ، ...)

$headers = [
              'Content-Type' => 'application/pdf',
           ];

return response()->download($file, 'filename.pdf', $headers);

Answer #6

// جرب هذا لتنزيل أي ملف. laravel 5. *

// تحتاج إلى استخدام الواجهة "استخدام Illuminate \ Http \ Response؛"

public function getDownload()
{

//PDF file is stored under project/public/download/info.pdf

    $file= public_path(). "/download/info.pdf";   

    return response()->download($file);
}




laravel-routing