hossein
5 سال پیش توسط hossein مطرح شد
8 پاسخ

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

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

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


ثبت پرسش جدید
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 5 سال پیش مطرح شد
0

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

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

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

return response()->download('path_to_file');

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

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


hossein
تخصص : توسعه دهنده
@emperatur133 5 سال پیش مطرح شد
0

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


hossein
تخصص : توسعه دهنده
@emperatur133 5 سال پیش مطرح شد
0

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

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


hossein
تخصص : توسعه دهنده
@emperatur133 5 سال پیش مطرح شد
0

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


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

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

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

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


hossein
تخصص : توسعه دهنده
@emperatur133 5 سال پیش مطرح شد
0

@hesammousavi

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

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

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

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


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 5 سال پیش مطرح شد
0

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

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

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

return response()->download('path_to_file');

hossein
تخصص : توسعه دهنده
@emperatur133 5 سال پیش مطرح شد
0

@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 ؟؟
چطور ازش لینک بگیرم؟ آموزشی هست؟


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

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