دانلود فایل فقط برای کاربران

- 2 هفته پیش
توسط hossein Emperatur آپدیت شد
hossein Emperatur ( 1780 تجربه )
3 هفته پیش

سلام من فایل ها رو تو پوشه public ذخیره کردم .
میخوام فقط کاربرانی که لوگین کردن بتونن اون فایل رو ببینن یا دانلود کنن
مثلا
domain.com/data/sample.pdf
طرف زد اول چک بشه کاربر لاگین شده (Auth::check()) بعد ادامه کار

میدونم روش بهتری هست . الان با این دید که من فایل ها رو تو پوشه public گذاشتم و لینک مستقیم هم دادم تو اسکریپت راهکار بدین

بهترین پاسخ انتخاب شده توسط hossein Emperatur
محمدحسن یگانه
2 هفته پیش

دوست عزیز. یک پاسخ کوتاه این هست که اگر فایل هاتون رو مستقیما در پوشه public گذاشته باشید همون طوری که از اسم پوشه مشخص هست و به قول خودتون هر کس لینک مستقیم فایل رو داشته باشه میتونه به فایل دسترسی پیدا کنه و عملا هیچ راهی هم وجود نداره. علتش هم این هست که با دادن لینک مستقیم فایل ریکوئست اصلا به لاراول نمیرسه که بخواید شرطی تعریف کنید و خود وب سرورتون مستقیما فایل رو برمیگردونه.

روش درست و تاجایی که میدونم تنها روش این هست که این جور فایل هاتون رو به جای public در storage ذخیره کنید و بعد احراز هویت فرد به این شکل پاسخ رو برگردونید:

if(!Auth::check()){
dd('لطفا برای دانلود فایل لاگین نمایید');
}

return response()->download('path_to_file');
علی بیات ( 106482 تجربه )
3 هفته پیش

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

hossein Emperatur ( 1780 تجربه )
3 هفته پیش

ممنون از شما
ربطی به میدلور نداده. شما مثلا آدرس
www.domain.com/data/sample.pdf
رو تو مرورگر میزنی . خب. data اسم پوشه ای هست که تو روت هاست هست. بعدش هم اسم فایل
خب. این اصلا به میلدور نمیرسه .

hossein Emperatur ( 1780 تجربه )
3 هفته پیش

کسی نمیتونه کمک کنه؟ ب نظر سخت نمیاد
من فقط میخوام مشخص بشه پوشه data که تو روت سایت هست برای نمایش محتواش کاربر لاگین کرده باشه

الان هاست من این پوشه ها رو داره
.
.
data
css
js
images
lar
و....
پوشه lar توش لاراول هست. من میخوام data رو فقط کاربران لاگین کرده دسترسی داشته باشن

hossein Emperatur ( 1780 تجربه )
3 هفته پیش

چرا هیچ وقت راکت یه نفر پیدا نمیشه جواب ادم رو بده
یعنی هیچ کدوم کار با فایل تو لاراول بدل نیستین؟ خب چرا انجمن لاراول میزنید
چرا انقدر غرور دارین .

حسام موسوی ( 131439 تجربه )
3 هفته پیش

@emperatur133
دوست عزیزم از بقیه چیزی طلب دارین ؟ بقیه وظیفه ندارن کمک کنند اینکه کمک میکنند از لطفشون هست که بهتون میکنن.

روش بهتر این داستان ایجاد کردن لینک مجازی و قرار دادن فایل ها در storage هست و با هش کردن url هم میشه لینک رو حتی زمان دار هم کرد به این شکل تا یک زمان مشخصی میشه از لینک استفاده برد یا حتی میشه چک کرد کسی که در حال دانلود هست یا قصد دانلود داره همون کسیه که لاگین کرده یا خیر.
در مورد روش ایجاد کردن دانلود امن در دوره های لاراول سایت آموزش داده شده یا اگر مایل نیستید میتونید در گوگل سرچ کنید بارتون نمونه کد میاره چون مقداری پیچیده هست امکان بازگو کردنش در اینجا نیست . مقداری زمان بره .

البته توضیح کوتاهی اگر بخوام بدم . اینکه فایل ها رو در storage قرار میدید و با متد download لینک رو به کاربر میدید . این وسط یه روت هم میسازید و ادرس رو که برای مثال /data/sample.pdf رو از کاربر میگیرد و بعد در کنار آدرس اصلی در storage قرار میدید و میدید به متد download تا فایل دانلود بشه .

hossein Emperatur ( 1780 تجربه )
2 هفته پیش

@hesammousavi

ممنون آقا موسوی
من طلب نداشتم. شما خودت برو ببین از این همه سوالی که پرسیدم هیچ کدوم به جواب نرسیده
یعنی تا الان نشد به تو راکت سوالی بپرسم جواب بدن . اخه سوال من چیزی سختی نبود. من چون زبانم ضعیفه نمیتونم دایکومنت لاراول رو بخونم وگرنه فکر نکنم این سوال تو لاراول جواب نداشته باشه. صحبت اینه یه عده انگار سختشونه راهنمایی کنن

در مورد جواب شما . من بالا عرض کردم یه اشتباهی انجام دادم فایل ها رو تو پوشه root سایت گذاشتم. پوشه بندی هم بالا نوشتم
بحث دانلود امن نیست . یک سری مدارک کاربر اپلود میکنه . مدیر میبینه مدارک رو
مشکل اینجاست اگه لینک اون فایل رو بگیری تو هرجا میتونی فایل رو ببینی . میخوام فقط اونایی که لاگین کردن یا شرط از این قبیل بزارم

مثال زدم www.domain.com/data/sample.pdf خب تو مرورگر بزنی نشون میده . میخوام قبلش ببینه اگه لاگین نیست بفرسته به صفحه لاگین

این پوشه بندی تو روت هاست هست
.
.
data
css
js
images
lar
و....
پوشه lar توش لاراول هست. من میخوام data رو فقط کاربران لاگین کرده دسترسی داشته باشن

محمدحسن یگانه ( 1039 تجربه )
2 هفته پیش

دوست عزیز. یک پاسخ کوتاه این هست که اگر فایل هاتون رو مستقیما در پوشه public گذاشته باشید همون طوری که از اسم پوشه مشخص هست و به قول خودتون هر کس لینک مستقیم فایل رو داشته باشه میتونه به فایل دسترسی پیدا کنه و عملا هیچ راهی هم وجود نداره. علتش هم این هست که با دادن لینک مستقیم فایل ریکوئست اصلا به لاراول نمیرسه که بخواید شرطی تعریف کنید و خود وب سرورتون مستقیما فایل رو برمیگردونه.

روش درست و تاجایی که میدونم تنها روش این هست که این جور فایل هاتون رو به جای public در storage ذخیره کنید و بعد احراز هویت فرد به این شکل پاسخ رو برگردونید:

if(!Auth::check()){
dd('لطفا برای دانلود فایل لاگین نمایید');
}

return response()->download('path_to_file');
hossein Emperatur ( 1780 تجربه )
2 هفته پیش

@mhyeganeh

آقا یگانه ممنون . فقط اینکه الان من کل قسمت های آپلودی رو اینطوری درست کردم
مثلا:

if ($request->hasFile('voice')) {
            $voice = $request->file('voice');
            if ($voice->isValid()) {
                $voisName = Auth::user()->id . '__' . time() . '__' . $voice->getClientOriginalName();
                $path = public_path() . '/data/' . Auth::user()->id . '/request/mp3/';
                $voice->move($path, $voiceName);
                if ($req->voice != ""){
                    if (file_exists($path.$req->voice)) {
                        unlink($path.$req->voice);
                    }
                }
                $req->voice = $voiceName;
            }
        }

الان من اینو چطور منتقل کنم به storage ؟؟
چطور ازش لینک بگیرم؟ آموزشی هست؟

برای ارسال پاسخ باید وارد سایت شوید