public function pic_upload() { $return_struct = array('status' => 0, 'code' => 501, 'msg' => 'Not Implemented', 'content' => array()); try { //* 初始化返回数据 */ $return_data = array(); $request_data = $this->input->post(); $request_product_id = $request_data['product_id']; // 请求的对应的图片说明 $request_pic_title_assoc = !empty($request_data) && isset($request_data['myPorductpicTitle']) && is_array($request_data['myPorductpicTitle']) && !empty($request_data['myPorductpicTitle']) ? $request_data['myPorductpicTitle'] : array(); //多附件上传 上传的表单域名字 $attach_field = 'myPorductpic'; // 附件应用类型 $attach_app_type = 'productPicAttach'; // 如果有上传请求 if (!page::issetFile($attach_field)) { throw new MyRuntimeException(Kohana::lang('o_global.bad_request'), 400); } //读取当前应用配置 $attach_setup = Kohana::config('attach.' . $attach_app_type); $mime_type2postfix = Kohana::config('mimemap.type2postfix'); $mime_postfix2type = Kohana::config('mimemap.postfix2type'); // 表单文件上传控件总数量 $file_upload_count = page::getFileCount($attach_field); // 初始化一些数据 // 本次文件上传总数量 $file_count_total = 0; // 本次文件上传总大小 $file_size_total = 0; // 上传文件meta信息 $file_meta_data = array(); // 遍历所有的上传域 //验证上传/采集上传信息 for ($index = 0; $index < $file_upload_count; $index++) { // 如果上传标志成功 if ((int) $_FILES[$attach_field]['error'][$index] === UPLOAD_ERR_OK) { if (!is_uploaded_file($_FILES[$attach_field]['tmp_name'][$index])) { throw new MyRuntimeException(Kohana::lang('o_product.file_upload_error'), 400); } $file_size_current = filesize($_FILES[$attach_field]['tmp_name'][$index]); if ($attach_setup['fileSizePreLimit'] > 0 && $file_size_current > $attach_setup['fileSizePreLimit']) { throw new MyRuntimeException(Kohana::lang('o_product.file_size_not_flow') . $attach_setup['fileSizePreLimit'], 400); } $file_type_current = FALSE; $file_type_current === FALSE && ($file_type_current = page::getFileType($attach_field, $index)); // 尝试通过Mime类型判断 $file_type_current === FALSE && page::getImageType($_FILES[$attach_field]['tmp_name'][$index]); // 尝试通过图片类型判断 $file_type_current === FALSE && ($file_type_current = page::getPostfix($attach_field, $index)); // 尝试通过后缀截取 //array_walk($attach_setup['allowTypes'], 'strtolower'); foreach ($attach_setup['allowTypes'] as $idx => $item) { $attach_setup['allowTypes'][$idx] = strtolower($item); } if (!empty($attach_setup['allowTypes']) && !in_array(strtolower($file_type_current), $attach_setup['allowTypes'])) { throw new MyRuntimeException(Kohana::lang('o_product.pic_type_error'), 400); } // 当前文件mime类型 $file_mime_current = isset($_FILES[$attach_field]['type'][$index]) ? $_FILES[$attach_field]['type'][$index] : ''; // 检测规整mime类型 if (!array_key_exists($file_mime_current, $mime_type2postfix)) { if (array_key_exists($file_type_current, $mime_postfix2type)) { $file_mime_current = $mime_postfix2type[$file_type_current]; } else { $file_mime_current = 'application/octet-stream'; } } //存储文件meta信息 $file_meta_data[$index] = array('name' => strip_tags(trim($_FILES[$attach_field]['name'][$index])), 'size' => $file_size_current, 'type' => $file_type_current, 'mime' => $file_mime_current, 'tmpfile' => $_FILES[$attach_field]['tmp_name'][$index]); // 设置上传总数量 $file_count_total += 1; // 设置上传总大小 $file_size_total += $file_size_current; } else { throw new MyRuntimeException(Kohana::lang('o_product.pic_upload_failed'), 400); } } if ($attach_setup['fileCountLimit'] > 0 && $file_count_total > $attach_setup['fileCountLimit']) { throw new MyRuntimeException(Kohana::lang('o_product.file_count_limit') . $attach_setup['fileCountLimit'], 400); } if ($attach_setup['fileSizeTotalLimit'] > 0 && $file_size_total > $attach_setup['fileSizeTotalLimit']) { throw new MyRuntimeException(Kohana::lang('o_product.file_size_total_limit') . $attach_setup['fileSizeTotalLimit'] . Kohana::lang('o_product.size') . $file_size_total, 400); } /* // 当前时间戳 $timestamp_current = time(); //预备一些数据 $src_ip_address = $this->input->ip_address(); $attach_meta = array( 'siteId'=>$site_id, 'siteDomain'=>$site_domain, ); // 调用附件服务 //$attachmentService = AttachmentService::get_instance(); require_once(Kohana::find_file('vendor', 'phprpc/phprpc_client',TRUE)); !isset($attachmentService) && $attachmentService = new PHPRPC_Client(Kohana::config('phprpc.remote.Attachment.host')); !isset($phprpcApiKey) && $phprpcApiKey = Kohana::config('phprpc.remote.Attachment.apiKey'); */ $route_prefix = Kohana::config('attach.routePrefix'); $route_mask_view = Kohana::config('attach.routeMaskViewProduct'); // 调用productpic服务 $productpicService = ProductpicService::get_instance(); // 遍历所有的上传meta域 foreach ($file_meta_data as $index => $file_meta) { $row_meta_struct = array(); /*$attachment_data_original = array( 'filePostfix'=>$file_meta['type'], 'fileMimeType'=>$file_meta['mime'], 'fileSize'=>$file_meta['size'], 'fileName'=>$file_meta['name'], 'srcIp'=>$src_ip_address, 'attachMeta'=>json_encode($attach_meta), 'createTimestamp'=>$timestamp_current, 'modifyTimestamp'=>$timestamp_current, ); // 调用后端添加附件信息,并调用存储服务存储文件 $args_org = array($attachment_data_original); $sign_org = md5(json_encode($args_org).$phprpcApiKey); $attachment_original_id = $attachmentService->phprpc_addAttachmentFileData($attachment_data_original,@file_get_contents($file_meta['tmpfile']),$sign_org); if (!is_numeric($attachment_original_id)) { throw new MyRuntimeException(Kohana::lang('o_product.phprpc_pic_save_failed'), 400); }*/ $att = AttService::get_instance($this->img_dir_name); $img_id = $att->save_default_img($file_meta['tmpfile']); if (!$img_id) { throw new MyRuntimeException(Kohana::lang('o_product.phprpc_pic_save_failed'), 500); } $productpic_data = array('product_id' => $request_product_id, 'is_default' => ProductpicService::PRODUCTPIC_IS_DEFAULT_FALSE, 'title' => isset($request_pic_title_assoc[$index]) ? strip_tags(trim($request_pic_title_assoc[$index])) : '', 'image_id' => $img_id); $productpic_row_id = $productpicService->add($productpic_data); $return_row_struct = array('id' => $productpic_row_id, 'is_default' => $productpic_data['is_default'], 'title' => $productpic_data['title'], 'image_id' => $img_id, 'picurl_o' => ProductpicService::get_attach_url($route_prefix, $img_id, ProductpicService::PRODUCTPIC_STANDARDS_ORIGINAL, $file_meta['type'], $route_mask_view), 'picurl_t' => ProductpicService::get_attach_url($route_prefix, $img_id, ProductpicService::PRODUCTPIC_STANDARDS_THUMBNAIL, $file_meta['type'], $route_mask_view), 'picurl_l' => ProductpicService::get_attach_url($route_prefix, $img_id, ProductpicService::PRODUCTPIC_STANDARDS_LARGE, $file_meta['type'], $route_mask_view)); $return_data[] = $return_row_struct; // 清理临时文件 @unlink($file_meta['thumb']['tmpfile']); } if (!empty($return_data) && $request_product_id > 0) { //检测是否存在默认图片,没有则设置商品默认图片 if ($productpicService->has_default_pic($request_product_id) == FALSE) { $default_productpic_id = $return_data[0]['id']; $productpicService->set_default_pic_by_productpic_id($default_productpic_id, $request_product_id); $return_data[0]['is_default'] = ProductpicService::PRODUCTPIC_IS_DEFAULT_TRUE; } } //Cache::remove('product_pictures.'.$request_product_id); //* 补充&修改返回结构体 */ $return_struct['status'] = 1; $return_struct['code'] = 200; $return_struct['msg'] = '上传成功!'; $return_struct['content'] = $return_data; //$pics = $productpicService->get_stand_pic_by_pic_id($productpic_row_id, ProductpicService::PRODUCTPIC_STANDARDS_COMMON); //* 请求类型 */ if ($this->is_ajax_request()) { // ajax 请求 // json 输出 $this->template->content = $return_struct; } else { // html 输出 $this->template = new View('layout/empty_html'); //$this->template->manager_data = $this->manager; //* 模板输出 */ //$this->template->return_struct = $return_struct; $content = new View($this->package_name . '/' . $this->class_name . '/' . __FUNCTION__); //* 变量绑定 */ //$this->template->title = Kohana::config('site.name'); $this->template->content = $content; //* 请求结构数据绑定 */ //$this->template->content->request_data = $request_data; //* 返回结构体绑定 */ //$this->template->content->return_struct = $return_struct; $this->template->content->picture = $return_struct['content']; } // end of request type determine } catch (MyRuntimeException $ex) { $this->template = new View('layout/default_html'); $this->_ex($ex, $return_struct, $request_data); } }
/** * 上传处理 */ public function uploadForm() { $returnStruct = array('status' => 0, 'code' => 501, 'msg' => _('Not Implemented'), 'content' => array()); try { // 是否调用本地服务 $useLocalService = TRUE; //$useLocalService = FALSE; //* 初始化返回数据 */ $returnStatus = 1; $returnCode = 200; $returnMessage = ''; $returnData = array(); //* 收集请求数据 ==根据业务逻辑定制== */ $requestData = $this->input->post(); //* 实现功能后屏蔽此异常抛出 */ //throw new MyRuntimeException(_('Not Implemented'),501); //* 权限验证,数据验证,逻辑验证 ==根据业务逻辑定制== */ //if(util::isAccess(array(Logon::$MGR_ROLE_LABEL_SYS_ADMIN,), array(Logon::$USER_ROLE_LABEL_DENIED,Logon::$USER_ROLE_LABEL_GUEST), $this->getUserRoleLabel())==FALSE){ // throw new MyRuntimeException(_('Access Denied'),403); //} if (util::isAccess('*', array(Logon::$USER_ROLE_LABEL_DENIED), $this->getUserRoleLabel()) == FALSE) { throw new MyRuntimeException(_('Access Denied'), 403); } //* 权限验证 ==根据业务逻辑定制== */ //* 数据验证 ==根据业务逻辑定制== */ //* 逻辑验证 ==根据业务逻辑定制== */ // 调用底层服务 !isset($servRouteInstance) && ($servRouteInstance = ServRouteInstance::getInstance(ServRouteConfig::getInstance())); // 执行业务逻辑 //:: 多附件上传 // 上传的表单域名字 $attachField = 'myattach'; // 附件应用类型 $attachAppType = 'appAttach'; // 如果有上传请求 if (page::issetFile($attachField)) { $returnData['attach'] = array(); //读取当前应用配置 $attachSetup = Lemon::config('attach.' . $attachAppType); $mimeType2Postfix = Lemon::config('mimemap.type2postfix'); $mimePostfix2Type = Lemon::config('mimemap.postfix2type'); // 表单文件上传控件总数量 $fileUploadCount = page::getFileCount($attachField); // 初始化一些数据 // 本次文件上传总数量 $fileCountTotal = 0; // 本次文件上传总大小 $fileSizeTotal = 0; // 上传文件meta信息 $fileMetaData = array(); // 遍历所有的上传域 //验证上传/采集上传信息 for ($index = 0; $index < $fileUploadCount; $index++) { // 如果上传标志成功 if ((int) $_FILES[$attachField]['error'][$index] === UPLOAD_ERR_OK) { if (!is_uploaded_file($_FILES[$attachField]['tmp_name'][$index])) { throw new MyRuntimeException(_('File not uploaded,index:') . $index, 400); } $fileSizeCurrent = filesize($_FILES[$attachField]['tmp_name'][$index]); if ($attachSetup['fileSizePreLimit'] > 0 && $fileSizeCurrent > $attachSetup['fileSizePreLimit']) { throw new MyRuntimeException(_('File Size PreLimit exceed,Limit:') . $attachSetup['fileSizePreLimit'] . ' index:' . $index . ' size:' . $fileSizeCurrent, 400); } $fileTypeCurrent = FALSE; $fileTypeCurrent === FALSE && page::getImageType($_FILES[$attachField]['tmp_name'][$index]); // 尝试通过图片类型判断 $fileTypeCurrent === FALSE && ($fileTypeCurrent = page::getFileType($attachField, $index)); // 尝试通过Mime类型判断 $fileTypeCurrent === FALSE && ($fileTypeCurrent = page::getPostfix($attachField, $index)); // 尝试通过后缀截取 if (!empty($attachSetup['allowTypes']) && !in_array($fileTypeCurrent, $attachSetup['allowTypes'])) { throw new MyRuntimeException(_('File Type invalid,index:') . $index, 400); } // 当前文件mime类型 $fileMimeCurrent = isset($_FILES[$attachField]['type'][$index]) ? $_FILES[$attachField]['type'][$index] : ''; // 检测规整mime类型 if (!array_key_exists($fileMimeCurrent, $mimeType2Postfix)) { if (array_key_exists($fileTypeCurrent, $mimePostfix2Type)) { $fileMimeCurrent = $mimePostfix2Type[$fileTypeCurrent]; } else { $fileMimeCurrent = 'application/octet-stream'; } } //存储文件meta信息 $fileMetaData[$index] = array('name' => strip_tags($_FILES[$attachField]['name'][$index]), 'size' => $fileSizeCurrent, 'type' => $fileTypeCurrent, 'mime' => $fileMimeCurrent); // 设置上传总数量 $fileCountTotal += 1; // 设置上传总大小 $fileSizeTotal += $fileSizeCurrent; } } if ($attachSetup['fileCountLimit'] > 0 && $fileCountTotal > $attachSetup['fileCountLimit']) { throw new MyRuntimeException(_('File Count Limit exceed,Limit:') . $attachSetup['fileCountLimit'], 400); } if ($attachSetup['fileSizeTotalLimit'] > 0 && $fileSizeTotal > $attachSetup['fileSizeTotalLimit']) { throw new MyRuntimeException(_('File Size Total Limit exceed,Limit:') . $attachSetup['fileSizeTotalLimit'] . ' size:' . $fileSizeTotal, 400); } // 执行上传 // 调用附件服务 if ($useLocalService == TRUE) { !isset($attachmentService) && ($attachmentService = Attachment_Service::getInstance($servRouteInstance)); } else { require_once Lemon::find_file('vendor', 'phprpc/phprpc_client', TRUE); !isset($attachmentService) && ($attachmentService = new PHPRPC_Client(Lemon::config('phprpc.remote.Attachment.host'))); !isset($phprpcApiKey) && ($phprpcApiKey = Lemon::config('phprpc.remote.Attachment.apiKey')); } //预备一些数据 $srcIpAddress = $this->input->ip_address(); $timeStampCurrent = time(); // 遍历所有的上传meta域 foreach ($fileMetaData as $index => $fileMeta) { $attachmentData = array('filePostfix' => $fileMeta['type'], 'fileMimeType' => $fileMeta['mime'], 'fileSize' => $fileMeta['size'], 'fileName' => $fileMeta['name'], 'srcIp' => $srcIpAddress, 'createTimestamp' => $timeStampCurrent, 'modifyTimestamp' => $timeStampCurrent); // 调用后端添加附件信息,并调用存储服务存储文件 if ($useLocalService == TRUE) { $attachmentId = $attachmentService->addAttachmentFileData($attachmentData, @file_get_contents($_FILES[$attachField]['tmp_name'][$index])); } else { $args = array($attachmentData); $sign = md5(json_encode($args) . $phprpcApiKey); $attachmentId = $attachmentService->phprpc_addAttachmentFileData($attachmentData, @file_get_contents($_FILES[$attachField]['tmp_name'][$index]), $sign); } $returnData['attach'][] = $attachmentId; } } //* 补充&修改返回结构体 */ $returnStruct['status'] = $returnStatus; $returnStruct['code'] = $returnCode; $returnStruct['msg'] = $returnMessage; $returnStruct['content'] = $returnData; //* 请求类型 */ if ($this->isAjaxRequest()) { // ajax 请求 // json 输出 $this->template->content = $returnStruct; } else { // html 输出 //* 模板输出 */ $this->template->returnStruct = $returnStruct; $content = new View($this->packageName . '/' . $this->className . '/' . __FUNCTION__); //* 变量绑定 */ $this->template->title = Lemon::config('site.name'); $this->template->content = $content; //* 请求结构数据绑定 */ $this->template->content->requestData = $requestData; //* 返回结构体绑定 */ $this->template->content->returnStruct = $returnStruct; //:: 当前应用专用数据 $this->template->content->title = Lemon::config('site.name'); } // end of request type determine } catch (MyRuntimeException $ex) { $returnStruct['status'] = 0; $returnStruct['code'] = $ex->getCode(); $returnStruct['msg'] = $ex->getMessage(); //TODO 异常处理 //throw $ex; if ($this->isAjaxRequest()) { $this->template->content = $returnStruct; } else { $this->template->returnStruct = $returnStruct; $content = new View('info'); $this->template->content = $content; //* 请求结构数据绑定 */ $this->template->content->requestData = $requestData; //* 返回结构体绑定 */ $this->template->content->returnStruct = $returnStruct; } } }
public function upload() { role::check('product_category'); $return_struct = array('status' => 0, 'code' => 501, 'msg' => 'Not Implemented', 'content' => array()); try { //* 初始化返回数据 */ $return_data = array(); //* 收集请求数据 ==根据业务逻辑定制== */ $request_data = $this->input->post(); // 上传的表单域名字 $attach_field = 'category_img'; // 附件应用类型 $attach_app_type = 'productPicAttach'; // 如果有上传请求 if (!page::issetFile($attach_field)) { throw new MyRuntimeException('请选择所要上传的图片', 400); } //读取当前应用配置 $attach_setup = Kohana::config('attach.' . $attach_app_type); $mime_type2postfix = Kohana::config('mimemap.type2postfix'); $mime_postfix2type = Kohana::config('mimemap.postfix2type'); // 表单文件上传控件总数量 $file_upload_count = page::getFileCount($attach_field); // 初始化一些数据 // 本次文件上传总数量 $file_count_total = 0; // 本次文件上传总大小 $file_size_total = 0; // 上传文件meta信息 $file_meta_data = array(); // 遍历所有的上传域 //验证上传/采集上传信息 for ($index = 0; $index < $file_upload_count; $index++) { // 如果上传标志成功 if ((int) $_FILES[$attach_field]['error'][$index] === UPLOAD_ERR_OK) { if (!is_uploaded_file($_FILES[$attach_field]['tmp_name'][$index])) { throw new MyRuntimeException(Kohana::lang('o_product.file_not_uploaded') . $index, 400); } $file_size_current = filesize($_FILES[$attach_field]['tmp_name'][$index]); if ($attach_setup['fileSizePreLimit'] > 0 && $file_size_current > $attach_setup['fileSizePreLimit']) { throw new MyRuntimeException(Kohana::lang('o_product.file_size_prelimit') . $attach_setup['fileSizePreLimit'] . Kohana::lang('o_product.index') . $index . Kohana::lang('o_product.size') . $file_size_current, 400); } $file_type_current = FALSE; $file_type_current === FALSE && page::getImageType($_FILES[$attach_field]['tmp_name'][$index]); // 尝试通过图片类型判断 $file_type_current === FALSE && ($file_type_current = page::getFileType($attach_field, $index)); // 尝试通过Mime类型判断 $file_type_current === FALSE && ($file_type_current = page::getPostfix($attach_field, $index)); // 尝试通过后缀截取 if (!empty($attachSetup['allowTypes']) && !in_array($file_type_current, $attach_setup['allowTypes'])) { throw new MyRuntimeException(Kohana::lang('o_product.file_type_invalid') . $index, 400); } // 当前文件mime类型 $file_mime_current = isset($_FILES[$attach_field]['type'][$index]) ? $_FILES[$attach_field]['type'][$index] : ''; // 检测规整mime类型 if (!array_key_exists($file_mime_current, $mime_type2postfix)) { if (array_key_exists($file_type_current, $mime_postfix2type)) { $file_mime_current = $mime_postfix2type[$file_type_current]; } else { $file_mime_current = 'application/octet-stream'; } } //存储文件meta信息 $file_meta_data[$index] = array('name' => strip_tags(trim($_FILES[$attach_field]['name'][$index])), 'size' => $file_size_current, 'type' => $file_type_current, 'mime' => $file_mime_current, 'tmpfile' => $_FILES[$attach_field]['tmp_name'][$index]); // 设置上传总数量 $file_count_total += 1; // 设置上传总大小 $file_size_total += $file_size_current; } } if ($attach_setup['fileCountLimit'] > 0 && $file_count_total > $attach_setup['fileCountLimit']) { throw new MyRuntimeException(Kohana::lang('o_product.file_count_limit') . $attach_setup['fileCountLimit'], 400); } if ($attach_setup['fileSizeTotalLimit'] > 0 && $file_size_total > $attach_setup['fileSizeTotalLimit']) { throw new MyRuntimeException(Kohana::lang('o_product.file_size_total_limit') . $attach_setup['fileSizeTotalLimit'] . Kohana::lang('o_product.size') . $file_size_total, 400); } // 当前时间戳 //$timestamp_current = time(); //预备一些数据 //$src_ip_address = $this->input->ip_address(); //$attach_meta = array (); // 调用附件服务 //$attachmentService = AttachmentService::get_instance(); //require_once (Kohana::find_file('vendor', 'phprpc/phprpc_client', TRUE)); //!isset($attachmentService) && $attachmentService = new PHPRPC_Client(Kohana::config('phprpc.remote.Attachment.host')); //!isset($phprpcApiKey) && $phprpcApiKey = Kohana::config('phprpc.remote.Attachment.apiKey'); /*$attachment_data_original = array ( // 'site_id'=>$site_id, 'filePostfix' => $file_meta['type'], 'fileMimeType' => $file_meta['mime'], 'fileSize' => $file_meta['size'], 'fileName' => $file_meta['name'], 'srcIp' => $src_ip_address, 'attachMeta' => json_encode($attach_meta), 'createTimestamp' => $timestamp_current, 'modifyTimestamp' => $timestamp_current ); // 调用后端添加附件信息,并调用存储服务存储文件 $args_org = array ( $attachment_data_original ); $sign_org = md5(json_encode($args_org) . $phprpcApiKey); $attachment_original_id = $attachmentService->phprpc_addAttachmentFileData($attachment_data_original, @file_get_contents($file_meta['tmpfile']), $sign_org); */ $AttService = AttService::get_instance($this->img_dir_name); $file_meta = $file_meta_data[0]; $img_id = $AttService->save_default_img($file_meta['tmpfile']); if (!$img_id) { throw new MyRuntimeException(Kohana::lang('o_product.phprpc_pic_save_failed'), 400); } $return_data['pic_attach_id'] = $img_id; $return_data['pic_url'] = $AttService->get_img_url($img_id); // 清理临时文件 @unlink($file_meta['tmpfile']); //* 补充&修改返回结构体 */ $return_struct['status'] = 1; $return_struct['code'] = 200; $return_struct['msg'] = '上传成功!'; $return_struct['content'] = $return_data; //* 请求类型 */ if ($this->is_ajax_request()) { // ajax 请求 // json 输出 $this->template->content = $return_struct; } else { // html 输出 $this->template = new View('layout/empty_html'); //$this->template->manager_data = $this->manager; //* 模板输出 */ //$this->template->return_struct = $return_struct; $content = new View($this->package . '/' . $this->class_name . '/' . __FUNCTION__); //* 变量绑定 */ //$this->template->title = Kohana::config('site.name'); $this->template->content = $content; //* 请求结构数据绑定 */ $this->template->content->request_data = $request_data; //* 返回结构体绑定 */ $this->template->content->return_struct = $return_struct; //:: 当前应用专用数据 $this->template->content->title = Kohana::config('site.name'); } // end of request type determine } catch (MyRuntimeException $ex) { $this->_ex($ex, $return_struct, $request_data, 'info2', 'layout/default_html'); } }
public function upload() { role::check('product_attribute'); try { $return_struct = array('status' => 0, 'code' => 501, 'msg' => 'Not Implemented', 'content' => array()); //* 初始化返回数据 */ $return_data = array(); //* 收集请求数据 ==根据业务逻辑定制== */ $return_data = $request_data = $this->input->post(); // 上传的表单域名字 $attach_field = 'attribute_img'; // 附件应用类型 $attach_app_type = 'productPicAttach'; // 如果无上传请求 if (!page::issetFile($attach_field)) { throw new MyRuntimeException('请选择需要上传的图片', 400); } $title = isset($request_data['attribute_img_title']) && is_array($request_data['attribute_img_title']) && !empty($request_data['attribute_img_title']) ? $request_data['attribute_img_title'] : array(); //读取当前应用配置 $attach_setup = Kohana::config('attach.' . $attach_app_type); $mime_type2postfix = Kohana::config('mimemap.type2postfix'); $mime_postfix2type = Kohana::config('mimemap.postfix2type'); // 表单文件上传控件总数量 $file_upload_count = page::getFileCount($attach_field); // 初始化一些数据 // 本次文件上传总数量 $file_count_total = 0; // 本次文件上传总大小 $file_size_total = 0; // 上传文件meta信息 $file_meta_data = array(); // 遍历所有的上传域 //验证上传/采集上传信息 for ($index = 0; $index < $file_upload_count; $index++) { // 如果上传标志成功 if ((int) $_FILES[$attach_field]['error'][$index] === UPLOAD_ERR_OK) { if (!is_uploaded_file($_FILES[$attach_field]['tmp_name'][$index])) { throw new MyRuntimeException(Kohana::lang('o_product.file_not_uploaded') . $index, 400); } $file_size_current = filesize($_FILES[$attach_field]['tmp_name'][$index]); if ($attach_setup['fileSizePreLimit'] > 0 && $file_size_current > $attach_setup['fileSizePreLimit']) { throw new MyRuntimeException(Kohana::lang('o_product.file_size_prelimit') . $attach_setup['fileSizePreLimit'] . Kohana::lang('o_product.index') . $index . Kohana::lang('o_product.size') . $file_size_current, 400); } $file_type_current = FALSE; $file_type_current === FALSE && page::getImageType($_FILES[$attach_field]['tmp_name'][$index]); // 尝试通过图片类型判断 $file_type_current === FALSE && ($file_type_current = page::getFileType($attach_field, $index)); // 尝试通过Mime类型判断 $file_type_current === FALSE && ($file_type_current = page::getPostfix($attach_field, $index)); // 尝试通过后缀截取 if (isset($attach_setup['allowTypes']) && !in_array($file_type_current, $attach_setup['allowTypes'])) { throw new MyRuntimeException(Kohana::lang('o_product.file_type_invalid') . $_FILES[$attach_field]['name'][$index], 400); } // 当前文件mime类型 $file_mime_current = isset($_FILES[$attach_field]['type'][$index]) ? $_FILES[$attach_field]['type'][$index] : ''; // 检测规整mime类型 if (!array_key_exists($file_mime_current, $mime_type2postfix)) { if (array_key_exists($file_type_current, $mime_postfix2type)) { $file_mime_current = $mime_postfix2type[$file_type_current]; } else { $file_mime_current = 'application/octet-stream'; } } //存储文件meta信息 $file_meta_data[$index] = array('name' => strip_tags(trim($_FILES[$attach_field]['name'][$index])), 'size' => $file_size_current, 'type' => $file_type_current, 'mime' => $file_mime_current, 'tmbfile' => $_FILES[$attach_field]['tmp_name'][$index]); // 设置上传总数量 $file_count_total += 1; // 设置上传总大小 $file_size_total += $file_size_current; } } if ($attach_setup['fileCountLimit'] > 0 && $file_count_total > $attach_setup['fileCountLimit']) { throw new MyRuntimeException(Kohana::lang('o_product.file_count_limit') . $attach_setup['fileCountLimit'], 400); } if ($attach_setup['fileSizeTotalLimit'] > 0 && $file_size_total > $attach_setup['fileSizeTotalLimit']) { throw new MyRuntimeException(Kohana::lang('o_product.file_size_total_limit') . $attach_setup['fileSizeTotalLimit'] . Kohana::lang('o_product.size') . $file_size_total, 400); } // 当前时间戳 //$timestamp_current = time(); //预备一些数据 //$src_ip_address = $this->input->ip_address(); //$attach_meta = array (); //require_once (Kohana::find_file('vendor', 'phprpc/phprpc_client', TRUE)); //!isset($attachmentService) && $attachmentService = new PHPRPC_Client(Kohana::config('phprpc.remote.Attachment.host')); //!isset($phprpcApiKey) && $phprpcApiKey = Kohana::config('phprpc.remote.Attachment.apiKey'); // 调用附件存储服务 for ($index = 0; $index < $file_count_total; $index++) { $img_id = AttService::get_instance()->save_default_img($file_meta_data[$index]['tmbfile']); if (!$img_id) { throw new MyRuntimeException(Kohana::lang('o_product.phprpc_pic_save_failed'), 400); } $attribute_image = array('attach_id' => $img_id, 'title' => isset($title[$index]) ? strip_tags(trim($title[$index])) : ''); $return_data['picurl'] = $attribute_image['picurl'] = AttService::get_instance()->get_img_url($img_id); $return_data['meta'] = implode('|', $attribute_image); // 清理临时文件 @unlink($file_meta_data[$index]['tmbfile']); } //echo "<pre>";print_r($file_meta_data);print_r($return_data);die(); //* 补充&修改返回结构体 */ $return_struct['status'] = 1; $return_struct['code'] = 200; $return_struct['msg'] = '上传成功!'; $return_struct['content'] = $return_data; //* 请求类型 */ if ($this->is_ajax_request()) { // ajax 请求 // json 输出 $this->template->content = $return_struct; } else { // html 输出 $this->template = new View('layout/empty_html'); //$this->template->manager_data = $this->manager; //* 模板输出 */ //$this->template->return_struct = $return_struct; $content = new View($this->package_name . '/' . $this->class_name . '/' . __FUNCTION__); //* 变量绑定 */ //$this->template->title = Kohana::config('site.name'); $this->template->content = $content; //* 请求结构数据绑定 */ $this->template->content->request_data = $request_data; //* 返回结构体绑定 */ $this->template->content->return_struct = $return_struct; //:: 当前应用专用数据 $this->template->content->title = Kohana::config('site.name'); } // end of request type determine } catch (MyRuntimeException $ex) { $return_struct['status'] = 0; $return_struct['code'] = $ex->getCode(); $return_struct['msg'] = $ex->getMessage(); //TODO 异常处理 //throw $ex; if ($this->is_ajax_request()) { $this->template->content = $return_struct; } else { //$return_struct['action']['type']= 'close'; // 当前应用为弹出窗口所以定义失败后续动作为关闭窗口 $this->template = new View('layout/default_html'); $this->template->return_struct = $return_struct; $content = new View('info2'); $this->template->content = $content; //* 请求结构数据绑定 */ $this->template->content->request_data = $request_data; $return_struct['action'] = array('type' => 'location', 'url' => request::referrer()); //* 返回结构体绑定 */ $this->template->content->return_struct = $return_struct; } } }