public function executeUpload(sfWebRequest $request) { // for apiKey check $memberId = $this->getUser()->getMember(); if ('1' === $request->getParameter('forceHtml')) { // workaround for some browsers $this->getResponse()->setContentType('text/html'); } if (!$_FILES) { return $this->renderJSON(array('status' => 'error', 'message' => 'null file')); } if (!$_FILES['upfile']) { return $this->renderJSON(array('status' => 'error', 'message' => 'null file')); } $filename = basename($_FILES['upfile']['name']); if (!$filename) { return $this->renderJSON(array('status' => 'error', 'message' => 'null file')); } $tmpFileName = $request->getParameter('changedname'); if ($filename != $tmpFileName) { $separates = $separates = explode('.', $filename); $cnt = count($separates); $fname = ''; $ext = ''; if (1 == $cnt) { $fname = $value; } else { $fname = join('', array_slice($separates, 0, $cnt - 1)); $ext = '.' . $separates[$cnt - 1]; } if ('' == $fname) { $filename = $tmpFileName; } } $filename = preg_replace('/\\|\\/|\\*|:|\\?|\\&|\'|\\"|>|<|undefined|\\|/', '-', urldecode($filename)); $communityId = (int) $request->getParameter('community_id'); if (1 <= (int) $communityId) { $community = Doctrine::getTable('Community')->find($communityId); if (!$community->isPrivilegeBelong($this->getUser()->getMember()->getId())) { return $this->renderJSON(array('status' => 'error', 'message' => 'you are not this community member.')); } $dirname = '/c' . $communityId; } else { $dirname = '/m' . $this->getUser()->getMember()->getId(); } //validate $filepath if (!preg_match('/^\\/[mc][0-9]+/', $dirname)) { return $this->renderJSON(array('status' => 'error', 'message' => 'file path error. ' . $dirname)); } $f = new File(); $f->setOriginalFilename($filename); $f->setType($_FILES['upfile']['type']); $f->setName($dirname . '/' . time() . $filename); $f->setFilesize($_FILES['upfile']['size']); if ($stream = fopen($_FILES['upfile']['tmp_name'], 'r')) { $bin = new FileBin(); $bin->setBin(stream_get_contents($stream)); $f->setFileBin($bin); $f->save(); $response = true; } else { //file open error $response = false; } if (true === $response) { return $this->renderJSON(array('status' => 'success', 'message' => 'file up success ' . $response, 'file' => $f->toArray(false))); } else { return $this->renderJSON(array('status' => 'error', 'message' => 'file upload error')); } }
public function createActivityImageByFileInfoAndActivityId(array $fileInfo, $activityId) { $file = new File(); $file->setOriginalFilename(basename($fileInfo['name'])); $file->setType($fileInfo['type']); $fileFormat = $file->getImageFormat(); if (is_null($fileFormat) || '' == $fileFormat) { $fileFormat = pathinfo($fileInfo['name'], PATHINFO_EXTENSION); } $fileBaseName = md5(time()) . '_' . $fileFormat; $filename = 'ac_' . $fileInfo['member_id'] . '_' . $fileBaseName; $file->setName($filename); $file->setFilesize($fileInfo['size']); $bin = new FileBin(); $bin->setBin($fileInfo['binary']); $file->setFileBin($bin); $file->save(); $activityImage = new ActivityImage(); $activityImage->setActivityDataId($activityId); $activityImage->setFileId($file->getId()); $activityImage->setUri($this->getActivityImageUriByfileInfoAndFilename($fileInfo, $filename)); $activityImage->setMimeType($file->type); $activityImage->save(); $this->createUploadImageFileByFileInfoAndSaveFileName($fileInfo, $filename); return $activityImage; }