خطای آپلود فایل در لاراول پس از آپلود روی هاست

- 3 هفته پیش
توسط Ashkan Nazari آپدیت شد
milad_bos ( 1080 تجربه )
4 هفته پیش

با سلام
بنده روی هاست طبق آموزش های جناب موسوی سایت رو آپلود کردم
سایت به درستی کار میکنه، و اینکه حتی اگر فرمی رو هم بخوام داخل سایت ذخیره کنم، به درستی داخل دیتابیس ذخیره میشه

ولی وقتی میخوام فایلی رو آپلود کنم، قسمت validation فرم این خطار رو برمیگردونه (داخل لوکال هاست فایل ها به درستی آپلود میشن) :
cant upload icon file
از move() برای آپلود استفاده میکنم

داخل نت که سرچ کردم، دلیلش هم تغییر مسیر پوشه public هست
هر کاری کردم و هر آموزشی رو هم انجام دادم، ولی انجام نشد

نسخه لاراول هم 5.7 هست

ممنون میشم مثل همیشه راهنمایی کنید

@ashkannazari248
@masoudproton
@milad
@ali.bayat
@Alimotreb
@hesammousavi
@endworld
@code2code
@khanzadimahdi
@info.aligraph
@SeyedMH.Mosavi

Ashkan Nazari ( 5410 تجربه )
4 هفته پیش

توی validation فایل چی نوشتید؟

milad_bos ( 1080 تجربه )
4 هفته پیش

@ashkannazari248
ولیدیشن درسته
اینکه فایل از نوع jpg, ... و سایز عکس رو

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

علی بیات ( 106482 تجربه )
4 هفته پیش

از دیسک public استفاده میکنید یا Local?

Alimotreb ( 91342 تجربه )
4 هفته پیش

سلام
@miladboshaghh

از DISK public استفاده کنید

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

                $filename = $file->getClientOriginalName();
                $filename = time() . '-' . md5(time()) . '.' . $ext;
                $file->move('Attach-Files', $filename);
                $selectfile = 'Attach-Files\\' . $filename;

اینطوری هم توی مسیر public ذخیره میشه!

milad_bos ( 1080 تجربه )
4 هفته پیش

@ali.bayat

والا اسم روش رو نمی دونم
اطلاعات داخل پوشه public ذخیره می شدن
بعد از اینکه move() میشدن

milad_bos ( 1080 تجربه )
4 هفته پیش

@Alimotreb
تشکر
میشه بیشتر توضیح بدین؟ آخه کد خودمم همین شکل هستش

milad_bos ( 1080 تجربه )
4 هفته پیش

@Alimotreb
در مورد همین DISC Public

Alimotreb ( 91342 تجربه )
4 هفته پیش

سلام مجدد

@miladboshaghh

این قسمت رو بخونید

https://laravel.com/docs/5.8/filesystem

milad_bos ( 1080 تجربه )
4 هفته پیش

@Alimotreb
من موضوعی که گفتید رو انجام دادم باز نشد
میشه بهتون دسترسی بدم لطف کنید ی نگاه بندازین؟

نمونه کد ذخیره کردن بنده اینه


    {
        $this->validate(request(), [
            'username' => 'required|unique:users',
            'email' => 'required|unique:users',
            'mobile' => 'unique:users',
            'password' => 'required',
            'icon' => 'image|mimes:jpeg,png,jpg,gif|max:2048',
        ], [
            'username.required' => 'وارد کردن نام کاربری الزامی می باشد.',
            'username.unique' => 'این نام کاربری از قبل ایجاد شده است.',
            'email.required' => 'وارد کردن ایمیل الزامی می باشد.',
            'email.unique' => 'این ایمیل از قبل ثبت گردیده است.',
            'mobile.unique' => 'این موبایل از قبل ثبت گردیده است.',
            'password.required' => 'وارد کردن رمزعبور الزامی می باشد.',
            'icon.mimes' => 'فرمت تصویر وارد شده مجاز نمی باشد. ( فرمت های مجاز: jpeg , jpg , png , gif )',
            'icon.image' => 'فایل انتخابی باید از نوع عکس باشد.',
            'icon.max' => 'حداکثر حجم تصویر 2 مگابایت می باشد.',
        ]);

        $icon = '';
        if (request()->hasFile('icon')) {
            $icon_name = 'icon-' . time() . date("Y-m-d") . '.' . request()->file('icon')->getClientOriginalExtension();
            if (request()->file('icon')->move('upload/users/icons', $icon_name)) {
                $icon = $icon_name;
            }
        }

داخل هاست لوکال به درستی کار میکنه و عکس رو داخل مسیر public ذخیره میکنه

Ashkan Nazari ( 5410 تجربه )
3 هفته پیش

سلام. ادرس ذخیره فایل رو از ریشه سایت بدید. مثل پایین

if (request()->file('icon')->move('home2/myUsername/public_html/img/upload/users/icons', $icon_name)) {
                $icon = $icon_name;
            }

منم یه بار اینجوری تو لوکال ادرس داده بودم و کار میکرد اما رو هاست به مشکل میخورد با ادرس دادن از ریشه حل شد

milad_bos ( 1080 تجربه )
3 هفته پیش

@ashkannazari248
تشکر

انجام دادم، ولی باز خطا میده

milad_bos ( 1080 تجربه )
3 هفته پیش

@Alimotreb
ممنون میشم کدهارو ی چک بکنی

Alimotreb ( 91342 تجربه )
3 هفته پیش

سلام
@miladboshaghh

ببینید شما مرحله آپلود رو اصلا تو شرط گذاشتید
بیایید به این شکل عمل کنید
مرحله ولیدیشن رو بردارید در مرحله اول ، روی فایل ولیدیشن نزنید
مرحله if رو هم بردارید
صاف و ساده
فایل رو بگیرید آپلود کنید
ببینید بازم آپلود میشه یا نه
بعد اگر آپلود شد
ولیدیشن روش بزارید و تست کنید
بعد از اون اگر آپلود شد
بعد شروط مختلف بزارید که اگر آپلود شد فلان شه و ....
پیچیده کردید کد هاتون رو
من خطایی نمیبینم تو کد ها ، ولی احتمالا تو عملکرد اختلالی داره!
مراحلی رو که گفتم برید جلو
خط به خط مشکلی بود dd() بگیرید
مشکلتون حل میشه

milad_bos ( 1080 تجربه )
3 هفته پیش

@Alimotreb
تشکر

دقیقا این کارهارو کردم
ولی وقتی که فقط میخوام فایل رو بگیرم و آپلود کنم، این خطا رو میده

File could not be uploaded: missing temporary directory.

حتی داخل AppserviceProvider این کد رو هم بعدش قرار دادم، خطا داد

public function register()
    {   $this->app->bind('path.public', function() {
        return realpath(base_path().'/public_html');
      });
    }
Alimotreb ( 91342 تجربه )
3 هفته پیش

سلام
@miladboshaghh

نیازی به این نیست

cpublic function register()
    {   $this->app->bind('path.public', function() {
        return realpath(base_path().'/public_html');
      });
    }

بدون این باید اوکی باشه.

milad_bos ( 1080 تجربه )
3 هفته پیش

@Alimotreb
خوب من بدون این هم زدم

این خطا رو میده

File could not be uploaded: missing temporary directory.
Alimotreb ( 91342 تجربه )
3 هفته پیش

سلام مجدد
@miladboshaghh

دسترسی پوشه public_html روی چند هست روی سرور و هاستتون؟
755؟

milad_bos ( 1080 تجربه )
3 هفته پیش

@Alimotreb

ارادت

بله 755 هست
اینم اسکرین شات

http://8upload.ir/uploads/f678193180.png
milad_bos ( 1080 تجربه )
3 هفته پیش

@Alimotreb

داداش میشه دسترسی بهت بدم ی نگاه بندازی؟
ممنون میشم

Alimotreb ( 91342 تجربه )
3 هفته پیش

سلام
@miladboshaghh

777 کنید تست بگیرید مجدد

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