public function upload() { $token = I('post.token'); $timestamp = I('post.timestamp'); $verifyToken = md5('unique_salt' . $timestamp); if (!empty($_FILES) && $token == $verifyToken) { //上传参数配置 $config = array('maxSize' => 3145728, 'rootPath' => './Uploads/', 'savePath' => '', 'saveName' => array('uniqid', ''), 'exts' => array('jpg', 'gif', '', 'jpeg'), 'autoSub' => true, 'subName' => array('date', 'Ymd')); $upload = new Upload($config); // 实例化上传类 // 上传文件 $info = $upload->upload(); if (!$info) { // 上传错误提示错误信息 $data = array('status' => 0, 'info' => $upload->getError()); } else { // 上传成功 //添加水印和缩略图 $img_url = $config['rootPath'] . $info['Filedata']['savepath'] . $info['Filedata']['savename']; //图片地址 $img = new Image(1, $img_url); $mark = "./Public/images/uploadify/hbh.png"; //水印图片地址 $img->water($mark); //添加水印默认是右下角 $img->save($img_url); //保存水印后的图片 $img->thumb(250, 150); //缩略图宽250px 高150px 等比例缩放 $thumb_url = $config['rootPath'] . $info['Filedata']['savepath'] . 'tb_' . $info['Filedata']['savename']; //缩略图地址 $img->save($thumb_url); //保存缩略图 $data = array('savename' => $info['Filedata']['savename'], 'savepath' => $config['rootPath'] . $info['Filedata']['savepath'], 'status' => 1); } $this->ajaxReturn($data); } }
/** * 上传头像图片 * @author huajie <*****@*****.**> */ public function uploadPhoto() { //TODO: 用户登录检测 /* 返回标准数据 */ $return = array('status' => 1, 'info' => '上传成功', 'data' => ''); /* 调用文件上传组件上传文件 */ $Picture = D('Picture'); $pic_driver = C('PHOTO_UPLOAD_DRIVER'); $info = $Picture->upload($_FILES, C('PHOTO_UPLOAD'), C('PHOTO_UPLOAD_DRIVER'), C("UPLOAD_{$pic_driver}_CONFIG")); //TODO:上传到远程服务器 /* 记录图片信息 */ if ($info) { $return['status'] = 1; $return = array_merge($info['download'], $return); $image = new Image(); $path = strpos($return['path'], '/') == 0 ? substr($return['path'], 1) : $return['path']; $image->open($path); if ($image->width() > 500 || $image->width > 300) { $image->thumb(500, 300); $image->save($path, null, 100, true); } } else { $return['status'] = 0; $return['info'] = $Picture->getError(); } /* 返回JSON数据 */ echo json_encode($return); //$this->ajaxReturn($return); }
private function do_upload() { // Make sure file is not cached (as it happens for example on iOS devices) header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { exit; // finish preflight CORS requests here } if (!empty($_REQUEST['debug'])) { $random = rand(0, intval($_REQUEST['debug'])); if ($random === 0) { header("HTTP/1.0 500 Internal Server Error"); exit; } } @set_time_limit(5 * 60); $uploadBaseDir = DOCUMENT_ROOT . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR; $targetDir = $uploadBaseDir . 'tmp'; $uploadDir = $uploadBaseDir . date('Y' . DIRECTORY_SEPARATOR . 'm'); $cleanupTargetDir = true; // Remove old files $maxFileAge = 5 * 3600; // Temp file age in seconds // Create target dir if (!file_exists($targetDir)) { @mkdir($targetDir); } // Create target dir if (!file_exists($uploadDir)) { @mkdir($uploadDir, 0777, true); } // Get a file name // if (isset($_REQUEST["name"])) { // $fileName = $_REQUEST["name"]; // } elseif (!empty($_FILES)) { // $fileName = $_FILES["file"]["name"]; // } else { // $fileName = uniqid("file_"); // } $fileName = uniqid("pic_") . '.jpg'; $md5File = @file($uploadBaseDir . 'md5list2.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $md5File = $md5File ? $md5File : array(); if (isset($_REQUEST["md5"]) && array_search($_REQUEST["md5"], $md5File) !== FALSE) { die('{"jsonrpc" : "2.0", "result" : null, "id" : "id", "exist": 1}'); } $filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName; $uploadPath = $uploadDir . DIRECTORY_SEPARATOR . $fileName; // Chunking might be enabled $chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0; $chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0; // Remove old temp files if ($cleanupTargetDir) { if (!is_dir($targetDir) || !($dir = opendir($targetDir))) { die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}'); } while (($file = readdir($dir)) !== false) { $tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file; // If temp file is current file proceed to the next if ($tmpfilePath == "{$filePath}.part") { continue; } // Remove temp file if it is older than the max age and is not the current file if (preg_match('/\\.part$/', $file) && filemtime($tmpfilePath) < time() - $maxFileAge) { @unlink($tmpfilePath); } } closedir($dir); } // Open temp file if (!($out = @fopen("{$filePath}.part", $chunks ? "ab" : "wb"))) { die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}'); } if (!empty($_FILES)) { if ($_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"])) { die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}'); } // Read binary input stream and append it to temp file if (!($in = @fopen($_FILES["file"]["tmp_name"], "rb"))) { die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}'); } } else { if (!($in = @fopen("php://input", "rb"))) { die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}'); } } while ($buff = fread($in, 4096)) { fwrite($out, $buff); } @fclose($out); @fclose($in); // Check if file has been uploaded if (!$chunks || $chunk == $chunks - 1) { // Strip the temp .part suffix off rename("{$filePath}.part", $filePath); rename($filePath, $uploadPath); array_push($md5File, $this->mymd5($uploadPath)); $md5File = array_unique($md5File); file_put_contents($uploadBaseDir . 'md5list2.txt', join($md5File, "\n")); } // Return Success JSON-RPC response $img = new Image(); $img->open($uploadPath); $img->thumb(800, 800); $img->save($uploadPath); $imgSize = $img->size(); $file_path = strtr($uploadPath, array(DOCUMENT_ROOT => '', '\\' => '/')); $photoData = array('uid' => $this->uid, 'file_path' => $file_path, 'status' => 1, 'w' => $imgSize[0], 'h' => $imgSize[1]); $pid = D('Photo')->add($photoData); $this->responseSuccess(compact('pid') + $photoData); }
public function changePhoto() { if (IS_POST) { $id = is_login(); $basepath = substr($_POST['basepath'], 1); $image = new Image(); $image->open($basepath); $image->crop($_POST['w'], $_POST['h'], $_POST['x'], $_POST['y'], 200, 200); $last = strrpos($basepath, '/') + 1; $ext = substr($basepath, strrpos($basepath, '.')); $path = substr($basepath, 0, $last); $filename = $path . 'crop_' . $id . $ext; $image->save($filename, null, 100, false); $filename = '/' . $filename . '?t=' . NOW_TIME; $user = array('id' => is_login(), 'photo' => $_POST['photo'], 'photo_url' => $filename); M('Users')->save($user); memberupdate($id, $user['photo_url']); $ret = array('status' => 1, 'info' => '头像更改成功!', 'photo_url' => $filename, 'photo' => $_POST['photo']); $this->ajaxReturn($ret); $this->success('头像更改成功!'); } else { $this->display('changePhoto'); } }