У меня есть один 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);
}
Я получаю следующую ошибку: -
Пожалуйста, помогите мне. Любая помощь будет оценена. заранее спасибо.
Редактировать
Я использую приведенный ниже код вместо putFileAs
file_put_contents("http://outsourcingit.asia/clubmart_storage/storage/$path", $file);
Но я м с этой ошибкой: -