رضا
5 سال پیش توسط رضا مطرح شد
13 پاسخ

مشکل دانلود از storage

سلام .
من با استفاده از دانلود امن و
response()->download(storage_path($path))
استفاده میکنم . همه چی تو لوکال خوبه و اوکیه
ولی تو سرور که centos۷ هست کار نمیکنه . تو فایرفاکس میگه file not found تو کروم هم میگه
This site can’t be reached ERR_INVALID_RESPONSE
کسی میدونه مشکل از چی میتونه باشه ؟
فایل موجوده . ادرس هم درسته . تو لوکال هم کاملا درست کار میکنه .


ثبت پرسش جدید
رضا
@reza159753 5 سال پیش مطرح شد
0

سلام متاسفانه هیچ کدوم از راهکار ها توی سرور ما جواب نداد. سرورمون centos7 بود
در نهایت مجبور شدم از force download خود پی اچ پی استفاده کنم که جواب داد.
کدش رو اینجا میزارم هر کی بعدا به این مشکل خورد میتونه از این روش استفاده کنه .

header("Content-disposition: " . 'attachment; filename="__YOUR_FILE_NAME"');
header("Content-type: " . File::mimeType(storage_path(YOUR_PATH)) );
readfile(storage_path(YOUR_PATH) );

ممنون از همه دوستان که جواب دادند .


امیر یاوندحسنی
تخصص : Full Stack Developer
@mirmahna.s 5 سال پیش مطرح شد
1

سلام @reza159753
مطمئن بشید که دستور php artisan storage:link رو در سرور وارد کرده باشید.


رضا
@reza159753 5 سال پیش مطرح شد
0

سلام ممنون از پاسختون .
@mirmahna.s
ولی نه توی اموزش ها نه اینکه تو لوکال نیازی نبود این کارو بکنیم . و بدون اینا داشت درست کار میکرد .
آیا حتما باید این کارو کرد؟


رضا
@reza159753 5 سال پیش آپدیت شد
0

سلام مجدد . تو لوکال هم از پوشه storage هم از پابلیک میتونم با استفاده از response()->download دانلود کنم
اما تو سرور که تو centos 7 هست نمیتونم .
SELINUX رو بستم بازم جوابی حاصل نشد
من فک میکردم مشکل از پوشه استورج هست اما هر فایلی رو از هر جایی میخوام force download کنم نمیشه تو سرور این کار رو کرد .
آیا تو اپاچی باید تغییراتی بدم ؟
کد:

$headers = array('Content-Type' => File::mimeType(public_path('/books/B_'.$book->id)) );
            return response()->download(public_path('/books/B_'.$book->id , $headers));

دوستان لطفا اگه میشه راهنمایی کنید خیلی فوریه .

@ali.bayat
@hesammousavi


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

درود
دوستمون هم اشاره کردند. اگر از php artisan storage:link استفاده نکردید .. این گزینه اول هست

چنانچه اطلاعات کامل‌تری راجب استفاده از Storage و نحوه عملکردش نیاز داشتید.... من چند وقت پیش یه مقاله در این باره نوشتم، لینکشو براتون میگذارم.

کار کردن با فایل‌ها در فریم‌ورک لاراول

موفق باشید


رضا
@reza159753 5 سال پیش مطرح شد
0

سلام
منم فکر میکرد مشکل همینه ولی ربطی به استوریج نداره . من حتی فایل های تو پابلیک رو هم نمیتونم دانلود کنم
@ali.bayat


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

کدهای بیشتری رو به اشتراک بگذارید


رضا
@reza159753 5 سال پیش آپدیت شد
0

سلام کد خاصی نیست .
@ali.bayat
یه خط کد که متن رو داخل فایل میزاره و ذخیره میکنه .
و دو خط بالایی

                File::put(public_path("/books/B_" . $content->book_id), $content->content);

$headers = array('Content-Type' => File::mimeType(public_path('/books/B_'.$book->id)) );
            return response()->download(public_path('/books/B_'.$book->id , $headers));

قبلش هم شروطی که لینک رو برسی میکنه که تا خط سوم کد اجرا میشه (خط سوم همین کد ها) خط سوم میترکه.


Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
0

سلام
@reza159753

اگر میگید توی Public هم باشه نمیتونم دانلود کنم
پس
تنظیمات وب سرور و سطح دسترسی فایل ها باید چک بشه


رضا
@reza159753 5 سال پیش مطرح شد
0

سلام .
@Alimotreb
من بهش دسترسی 777 دادم .
تنظیمات وب سرور مثلا چی رو باید چک کرد ؟


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 5 سال پیش مطرح شد
0

دو نکته در کد شما دیده میشه.. احتمالا اگر اصلاح کنید مشکل حل بشه

  • ۱ : متد download به شکل زیر باید استفاده بشه:

    return response()->download($pathToFile, $name, $headers);
  • ۲ : به هلپر Public_path در خط سوم دقت کنید.. پرانتزهای این متد در جاهای صحیحی نیستند..

کدتون کم و بیش باید شبیه زیر باشه:

    $file_path = public_path("/books/B_" . $content->book_id);
    File::put($file_path, $content->content);
    $headers = array('Content-Type' => File::mimeType($file_path) );
    return response()->download($file_path, $book->id , $headers));

Alimotreb
تخصص : کانفیگ سرور و برنامه نویس
@Alimotreb 5 سال پیش مطرح شد
0

سلام
@reza159753

مواردی رو که جناب بیات گفتند رو تست بگیرید

کد htaccess در سرور رو هم بزارید تا بررسیش کنیم.


رضا
@reza159753 5 سال پیش مطرح شد
0

سلام متاسفانه هیچ کدوم از راهکار ها توی سرور ما جواب نداد. سرورمون centos7 بود
در نهایت مجبور شدم از force download خود پی اچ پی استفاده کنم که جواب داد.
کدش رو اینجا میزارم هر کی بعدا به این مشکل خورد میتونه از این روش استفاده کنه .

header("Content-disposition: " . 'attachment; filename="__YOUR_FILE_NAME"');
header("Content-type: " . File::mimeType(storage_path(YOUR_PATH)) );
readfile(storage_path(YOUR_PATH) );

ممنون از همه دوستان که جواب دادند .


mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش مطرح شد
1

میتونستید از پکیج زیر استفاده کنید

https://github.com/shetabit/chunky

از کدی که خودتون نوشتین خیلی بهینه تر هست. میتونید به صورت زیر فایل رو استریم کنید (بفرستید برای دانلود)ّ

namespace App\Http\Controllers;

use App\Models\File;
use Shetabit\Chunky\Classes\StreamOut;

class StreamOutController extends Controller
{
    /**
     * Stream file output
     *
     * @param File $file
     */
    public function __invoke(File $file)
    {
        // procceed until all file has sent to client
        ini_set('max_execution_time', '0');

        // retrieve file's path
        $path = '../'.$file->path; 

        // prepare stream
        $stream = new StreamOut($path);

        // run stream
        $stream->process();
    }
}

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام