Вызов функции-члена getRealPath () для строки при загрузке изображения из URL в Laravel 5.8. - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть один CSV-файл, который используется для загрузки товара на мой сайт. Там у меня есть image_url, но когда я пытаюсь загрузить CSV, продукт добавляется, но изображение не загружается. Я использую cURL, чтобы получить изображение из URL, но оно не дает UploadedFile Instance , поэтому я думаю, что это может быть проблемой. Так может кто-нибудь дать мне какое-нибудь решение. Вот мой код: -

public function import_product(Request $request)
    {
        $attributes = $request->all();
        $path = $request->file('products_csv')->getRealPath();
        $data = \Excel::toArray('', $path, null, \Maatwebsite\Excel\Excel::TSV)[0];
        foreach ($data as $key => $value) {
            if($key == 0) continue;
            $checksku = $this->product->checksku($value[1]);
            if($checksku == 1){
                $notification = array(
                    'message' => 'SKU must be unique.', 
                    'alert-type' => 'error'
                );
                return redirect('/products-section/import-view')->with($notification);
            }
            if($value[4] < 0){
                $notification = array(
                    'message' => 'Price must be a positive number', 
                    'alert-type' => 'error'
                );
                return redirect('/products-section/import-view')->with($notification);
            }
            if($value[5] < 0){
                $notification = array(
                    'message' => 'Cost must be a positive number', 
                    'alert-type' => 'error'
                );
                return redirect('/products-section/import-view')->with($notification);
            }
            if(!filter_var($value[6], FILTER_VALIDATE_INT)){
                $notification = array(
                    'message' => 'Stock must be a positive integer', 
                    'alert-type' => 'error'
                );
                return redirect('/products-section/import-view')->with($notification);
            }
            if($value[2] < 0){
                $notification = array(
                    'message' => 'Shipping cost must be a positive number', 
                    'alert-type' => 'error'
                );
                return redirect('/products-section/import-view')->with($notification);
            }
            $product = $this->product->create([
                'title' => $value[0],
                'sku' => $value[1],
                'price' => round($value[4], 2),
                'cost' => round($value[5], 2),
                'stock_level' => $value[6],
                'description' => '<p>' . $value[11] . '</p>',
                'description_short' => '<p>' . $value[12] . '</p>',
                'date_created' => date('Y-m-d'),
                'date_updated' => date('Y-m-d'),
                'supplier_id' => $attributes['supplier_id'],
                'brand_id' => 1,
                'status' => 1,
                'taxable' => 0,
                'shipping_cost' => round($value[2], 2),
                'shipping_type' => $value[3],
                'special_teamwear_category' => $value[7] == 'on' ? 1 : 0,
                'message_artwork' => $value[8] == 'on' ? 1 : 0,
                'extra_info' => $value[10] == 'on' ? 1 : 0,
                'is_strike' => $value[9] == 'on' ? 1 : 0,
                'is_deals' => $value[13] == 'on' ? 1 : 0
            ]);
            ProductNew::saveproduct($product->id);
            $product->categories()->create(['category_id' => $attributes['product_categories']]);
            $url = $value[14];
            $extension = pathinfo($url, PATHINFO_EXTENSION);
            $im = ProductImage::create(['product_id' => $product->id]);
            $path = 'product/' . (int)($product->id / 5000 + 1) . '/' . $product->id;
            $image_name = str_slug($product->title) . "-" . $im->id . "." . $extension;
            // $file = file_get_contents($url);
            // file_put_contents()
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            $file = curl_exec($ch);
            curl_close($ch);
            $imageInfo = getimagesizefromstring($file);
            $width = $imageInfo[0];
            $height = $imageInfo[1];
            if($width > config('const.image_size.product.width') && $height > config('const.image_size.product.height')){
                $notification = array(
                    'message' => "Image must have dimensions:". config('const.image_size.product.width').' x '.config('const.image_size.product.height') .'px', 
                    'alert-type' => 'error'
                );
                return redirect('/products-section/import-view')->with($notification);
            }
            $file_saved = Storage::disk('public')->putFileAs($path, $file, $image_name);
            $im->path = $path;
            $im->name = $image_name;
            $im->copied = $file_saved;
            $im->save();
        }
        $notification = array(
            'message' => 'All of the products imported successfully.', 
            'alert-type' => 'success'
        );
        return redirect('/products-section/products/')->with($notification);
    }

Я получаю следующую ошибку: -

error coming while uploading

Пожалуйста, помогите мне. Любая помощь будет оценена. заранее спасибо.

Редактировать

Я использую приведенный ниже код вместо putFileAs

file_put_contents("http://outsourcingit.asia/clubmart_storage/storage/$path", $file);

Но я м с этой ошибкой: -

error from file_put_contents

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...