public function update_contact_avatar($small_data, $middle_data, $original_data, $pic_data) { $user_id = $this->uid; //获取通讯录相册 $album_id = $this->db->getOne("wp_album", "album_id", "user_id = {$user_id} AND album_flag = '3'"); if (!$album_id) { $data = array("album_name" => '通讯录相册', "user_id" => $user_id, "create_dt" => time(), "update_dt" => time(), "album_flag" => 3); $album_id = $this->db->insertData("wp_album", $data); } $file_md5 = md5($original_data); if (!$this->TT) { $this->TT = new TTServer(); } $data = $this->TT->get($file_md5); //上传到FS include 'application/include/FastDFS.php'; $this->fs = FastDFS::factory('group1'); if ($data) { //生成新的格式的FS $fsfile_name_array = explode('.', $data['pic_fs_path']); $thumb_small_path = $fsfile_name_array[0] . '_48.' . $fsfile_name_array[1]; $thumb_middle_path = $fsfile_name_array[0] . '_120.' . $fsfile_name_array[1]; //已存在 $dataExif = unserialize($data['exif']); $pic_data_array['pic_width'] = $dataExif['拍摄分辨率宽'] ? $dataExif['拍摄分辨率宽'] : $data['width']; $pic_data_array['pic_height'] = $dataExif['拍摄分辨率高'] ? $dataExif['拍摄分辨率高'] : $data['height']; $pic_data_array['degree'] = $dataExif['方向']; //上传size=small的图片 $meta = array('remote_filename' => $thumb_small_path); $fs_small = $this->fs->upByBuff($small_data, 'jpg', $meta); //上传size=middle的图片 $meta = array('remote_filename' => $thumb_middle_path); $fs_middle = $this->fs->upByBuff($middle_data, 'jpg', $meta); //插入 数据大wp图片表 $pic_data_array['album_id'] = $album_id; $pic_data_array['user_id'] = $user_id; $pic_data_array['create_time'] = time(); $pic_data_array['update_time'] = time(); $pic_data_array['upload_ip'] = $_SERVER['REMOTE_ADDR']; $pic_data_array['upload_file_name'] = $pic_data['upload_file_name']; $pic_data_array['file_md5'] = $file_md5; $pic_data_array['file_size'] = strlen($original_data); $pic_id = $this->db->insertData("wp_pic", $pic_data_array); if ($pic_id) { return array("data" => array("0" => Kohana::config('album.recordThumb') . 'imgs/' . $pic_id . '.jpg', "1" => Kohana::config('album.recordThumb') . 'imgs/' . $pic_id . '_120.jpg')); } else { return null; } } else { //写入用户临时图片文件 //写入文件 if (!is_dir(ALBUM_IMAGE . $user_id)) { mkdir(ALBUM_IMAGE . $user_id, 0777); } $tmpfname = ALBUM_IMAGE . $user_id . '/' . $user_id . '_' . $file_md5 . '.jpg'; $handle = fopen($tmpfname, "w"); fseek($handle, 0); //移动指针到文件开始位置 fwrite($handle, $original_data); fclose($handle); //上传到DFS、获得文件映射名 //fs图片文件映射 $img_fs_name = $this->fs->upByFileName($tmpfname); if ($img_fs_name) { $fsfile_type_array = explode('.', $img_fs_name); $fsfile_name = $fsfile_type_array[0]; $thumb_small_path = $fsfile_type_array[0] . '_48.' . $fsfile_type_array[1]; $thumb_middle_path = $fsfile_type_array[0] . '_120.' . $fsfile_type_array[1]; //上传size=small的图片 $meta = array('remote_filename' => $thumb_small_path); $fs_small = $this->fs->upByBuff($small_data, 'jpg', $meta); //上传size=middle的图片 $meta = array('remote_filename' => $thumb_middle_path); $fs_middle = $this->fs->upByBuff($middle_data, 'jpg', $meta); } //获取图片exif信息 $exif = Exif::get_exif_info($tmpfname); $img_exif = $exif['exif_info']; $degree = $exif['degree'] ? intval($exif['degree']) : 0; $imgsWH = Image::getImagesWidthHight($tmpfname); $images_width = $imgsWH['width']; $images_height = $imgsWH['height']; //缩略图队列写入内存表 $thumb_array = array(); $thumb_array['file_path'] = $tmpfname; $thumb_array['fs_path'] = $fsfile_name; /* $thumbs = $this->create_thumb_by_width_height($images_width, $images_height, true, true); foreach ( $thumbs as $key => $value ) { if($key == 0) { $thumb_type_array.= $value['type']; } else { $thumb_type_array.= ','.$value['type']; } } $thumb_array['thumb_type'] = $thumb_type_array ; $thumb_array['images_width'] = $images_width; $thumb_array['images_height'] = $images_height; $thumb_array['create_time'] = time(); $this->add_to_thumb_queue($thumb_array); */ //添加数据到TTServer $value = array("pic_fs_path" => $img_fs_name, "exif" => serialize($img_exif)); $this->TT->set($file_md5, $value); //写表 $pic_data_array = array(); $pic_data_array['pic_width'] = $images_width; $pic_data_array['pic_height'] = $images_height; $pic_data_array['degree'] = $degree; $pic_data_array['album_id'] = $album_id; $pic_data_array['user_id'] = $user_id; $pic_data_array['create_time'] = time(); $pic_data_array['update_time'] = time(); $pic_data_array['upload_ip'] = $_SERVER['REMOTE_ADDR']; $pic_data_array['upload_file_name'] = $pic_data['upload_file_name']; $pic_data_array['file_md5'] = $file_md5; $pic_data_array['file_size'] = strlen($original_data); $pic_id = $this->db->insertData("wp_pic", $pic_data_array); if ($pic_id) { return array("data" => array("0" => Kohana::config('album.recordThumb') . 'imgs/' . $pic_id . '.jpg', "1" => Kohana::config('album.recordThumb') . 'imgs/' . $pic_id . '_120.jpg')); } else { return null; } } }
public function uploadFileEnd($temp_id, $flag) { $uid = $this->uid; $data = $this->db->getRow("album_upload_temp", "file_title, file_md5, file_size, file_offset, file_path, file_type", "temp_id={$temp_id} AND user_id={$uid}"); if (!$data) { return array("code" => 403, "msg" => "uploadID不存在或无权限"); } //if($data['file_size'] != $data['file_offset']) { // return array("code" => 403, "msg" => "文件大小不匹配."); //} //$tempfsize = 0; //if( file_exists(ALBUM_TEMP.$data['file_path']) ) { // $tempfsize = filesize(ALBUM_TEMP.$data['file_path']); //} //if(!$tempfsize || $tempfsize != $data['file_size']) { // return array("code" => 403, "msg" => "文件大小不匹配!"); //} //移动临时文件到文件目录 if (!is_dir(ALBUM_IMAGE . $uid)) { mkdir(ALBUM_IMAGE . $uid, 0777); } //临时文件移动到user文件夹下 $tempfname = substr($data['file_path'], 0, -4); rename(ALBUM_TEMP . $data['file_path'], ALBUM_IMAGE . $tempfname); //移动文件成功 if (file_exists(ALBUM_IMAGE . $tempfname)) { $file_url = ALBUM_IMAGE . $tempfname; //获取图片的EXIF信息 $exif = Exif::get_exif_info($file_url); $img_exif = $exif['exif_info']; $degree = $exif['degree']; //获取图片的高度、宽度 $img = getimagesize($file_url); $width = $img[0]; $height = $img[1]; $file_format = $img[2]; if (!$img || !$width || !$height || $file_format > 6) { return false; } if ($file_format == 2 && $degree) { //旋转图片 $rotateDeg = $degree * 90; Image::rotate_by_degree($file_url, $rotateDeg); if ($degree == 1 || $degree == 3) { $t = $width; $width = $height; $height = $t; } $img_exif['degree'] = 0; $degree = 0; } $flag = $flag ? $flag : 2; //广播标识 $album_id = $this->db->getOne("wp_album", "album_id", "user_id = {$uid} AND album_flag={$flag}"); if (!$album_id) { //创建广播相册 $album_data = array('album_name' => '广播相册', 'user_id' => $uid, 'create_dt' => time(), 'update_dt' => time(), 'album_flag' => $flag); $album_id = $this->db->insertData("wp_album", $album_data); } $pic_info = array('album_id' => $album_id, 'user_id' => $uid, 'create_time' => time(), 'update_time' => time(), 'upload_ip' => $_SERVER['REMOTE_ADDR'], 'file_md5' => $data['file_md5'], 'file_size' => $data['file_size'], 'file_type' => $data['file_type'], 'pic_width' => $width, 'pic_height' => $height, 'degree' => intval($degree), 'appid' => 1); //上传到FS include 'application/include/FastDFS.php'; $this->fs = FastDFS::factory('group1'); //FS存储地址 $img_fs_name = $this->fs->upByFileName($file_url); //写TTServer $value = array("pic_fs_path" => $img_fs_name, "exif" => serialize($img_exif), "width" => $width, "height" => $height); $this->TT = new TTServer(); $this->TT->set($data['file_md5'], $value); $pic_id = $this->db->insertData("wp_pic", $pic_info); $this->db->query("UPDATE wp_album SET pic_num = pic_num+1 WHERE album_id={$album_id}"); //删除临时表数据 $this->db->DeleteData("album_upload_temp", array("temp_id" => $temp_id)); //生成160 $images = Image::createThumb_by_type($file_url, 160); $thumb_fs_name = substr($img_fs_name, 0, -4); $meta = array('remote_filename' => $thumb_fs_name . '_160.jpg'); $this->fs->upByFileName($images, $meta); if (file_exists($images)) { unlink($images); } return array("pid" => $pic_id, "url" => Kohana::config('album.recordThumb') . 'imgs/' . $pic_id . '_160.jpg', "uploaded" => true); } else { //移动文件失败 return null; } }