// +---------------------------------------------------------------------- namespace app\controller\api; use crmeb\basic\BaseController; use think\facade\Db; use crmeb\services\UploadService; use Exception; use ZipArchive; /** * Class Auth * @package app\controller\api * @author xaboy * @day 2020-05-06 */ class Demo extends BaseController { public function index() { $mer_id = 65; $file = request()->file('file'); $zip_name = explode('.', $file->getOriginalName())[0]; // 上传到本地服务器 $savename = \think\facade\Filesystem::putFile('zippic', $file); $dir = date('Y-m-d_H-i-s') . '_' . $mer_id; $destination_path = public_path('uploads/pic/' . $dir.'_'.$zip_name); mkdir($destination_path, 0777, true); $zipFile = new \PhpZip\ZipFile(); try { $zipFile ->openFile(public_path('uploads').$savename) // open archive from file ->extractTo($destination_path) // add an entry from the string // ->deleteFromRegex('~^\.~') // delete all hidden (Unix) files ->close(); // close archive } catch (\PhpZip\Exception\ZipException $e) { throw new \think\exception\HttpException(404,$e->getMessage()); } finally { $zipFile->close(); } // if ($zip->open(public_path('uploads').$savename) === TRUE) { // $zip->extractTo($destination_path); // $zip->close(); // } else { // throw new \think\exception\HttpException(404, '解压失败'); // } $directory = $destination_path; $files = scandir($directory); $dir = 'def/' . date('Y-m-d'); $upload = UploadService::create(); /**循环目录 */ foreach ($files as $file) { if ($file === '.' || $file === '..' || $file === '__MACOSX') { continue; } if (!is_dir($directory . '/' . $file)) { continue; } $files_two = scandir($directory . '/' . $file); $image_extensions = array('jpg', 'jpeg', 'png'); $image = ''; $slider_image = []; $details = []; $sku_arr = []; /**清洗图片 */ foreach ($files_two as $file_two) { if ($file_two === '.' || $file_two === '..' || $file_two === '__MACOSX') { continue; } $arr = explode('.', $file_two); if (in_array($arr[1], $image_extensions)) { /**首图 */ $images[] = $file_two; if ($image == '' && is_numeric($arr[0])) { $image = $directory . '/' . $file . '/' . $file_two; continue; } /**轮播图 */ if (is_numeric($arr[0]) && count($slider_image) < 4) { $slider_image[] = $directory . '/' . $file . '/' . $file_two; continue; } /**详情图 */ if (is_numeric($arr[0])) { $details[] = $directory . '/' . $file_two; continue; } /**sku图 */ $sku = explode('==', $arr[0]); if ($sku) { $sku = implode(',', $sku); $sku_arr[$sku] = $directory . '/' . $file . '/' . $file_two; } } } $where = ['mer_id' => $mer_id, 'is_del' => 0]; $update = []; $update_content['title'] = ''; $update_content['image'] = []; $update_content['type'] = 1; $find = Db::name('store_product')->where($where)->where('store_name', $file)->find(); if ($find) { try { /**更新商品图片 */ $image = $upload->to($dir)->stream(file_get_contents($image)); $update['image'] = $image->filePath; foreach ($slider_image as $k => $v) { $oss = $upload->to($dir)->stream(file_get_contents($v)); $update['slider_image'][] = $oss->filePath; } if (isset($update['slider_image'])) { $update['slider_image'] = implode(',', $update['slider_image']); } Db::name('store_product')->where('product_id', $find['product_id'])->update($update); /**更新规格图片 */ foreach ($sku_arr as $k => $v) { $store_product_attr_value = Db::name('store_product_attr_value')->where(['mer_id' => $mer_id, 'product_id' => $find['product_id'], 'sku' => $k])->find(); if ($store_product_attr_value) { $oss = $upload->to($dir)->stream(file_get_contents($v)); Db::name('store_product_attr_value') ->where(['mer_id' => $mer_id, 'product_id' => $find['product_id'], 'sku' => $k]) ->update(['image' => $oss->filePath]); } } /**更新详情图片 */ $store_product_content = Db::name('store_product_content')->where(['product_id' => $find['product_id']])->find(); foreach ($details as $k => $v) { $oss = $upload->to($dir)->stream(file_get_contents($v)); $update_content['image'][] = $oss->filePath; } if ($store_product_content) { if (isset($update_content['image']) && !empty($update_content['image'])) { Db::name('store_product_content') ->where(['product_id' => $find['product_id']]) ->update(['content' => json_encode($update_content)]); } } else { $update_content['product_id'] = $find['product_id']; Db::name('store_product_content') ->insert(['product_id' => $find['product_id'], 'type' => 1, 'content' => json_encode($update_content)]); } } catch (Exception $e) { halt($e->getMessage(), $e->getLine()); } } } halt(1); } }