안녕하세요.
ci4로 개발 공부하고 있습니다.
이미지 파일을 업로드하는 것까지는 성공을 했는데, 이미지를 view에서 어떻게 노출시켜야 할지 고민입니다.
이미지의 저장경로는 writable/uploads/blog 이고, 웹에서 접근가능한 위치가 아닙니다.
가장 ci적인 해결방법이 무엇인지 질문드립니다.
아래는 controller
public function create()
{
$model = new BlogModel();
helper('text');
if ($this->request->getMethod() === 'post' && $this->validate([
'bl_title' => 'required|min_length[3]|max_length[255]',
'bl_text' => 'required',
]))
{
# 블로그DB 저장
$model->save([
'bl_title' => $this->request->getPost('bl_title'),
'bl_text' => $this->request->getPost('bl_text'),
'bl_regdate' => date("Y-m-d H:i:s"),
]);
$insertId = $model->getInsertID();
$data['title'] = "블로그 작성";
$data['refresh'] = "/blog/view/" . $insertId;
# 첨부파일 처리
$file = $this->request->getFile('bl_file');
//print_r($file); return;
if($file->isValid() && ! $file->hasMoved())
{
//$newName = sprintf("s", $insertId) . "-" . random_string('alnum', 7) . "." . $file->getExtension();
$newName = $file->getRandomName();
$file->store('blog/', $newName);
$model->save([
'bl_idx' => $insertId,
'bl_file' => base64_encode(serialize(['origin' => $file->getClientName(), 'save' => 'blog/'.$newName])),
]);
}
echo view('templates/noheader', $data);
echo view('blog/success', $data);
echo view('templates/nofooter'), $data;
}
else
{
echo view('templates/header', ['title' => '블로그 작성']);
echo view('blog/create');
echo view('templates/footer');
}
}
티스토리처럼 URL을 부르면 file controller 에서 해당 파일의 값을 넘겨주는 방법도 있습니다.
아니면 처음부터 uploads 에 올리는것도 방법입니다.
linux라면 디렉토리를 마운트하는 방법도 있습니다.
https://www.tuwlab.com/ece/10064
답변 감사드립니다.
공부하는 단계이므로 가장 간단해보이는 심볼릭 링크로 해결하였습니다.
$ cd public
$ ln -s ../writable/uploads .
저희 같은경우는
저장파일 경로는 따로 도메인 잡고 해당 도메인에서 php가 작동되지 않게 한다음 불러다 씁니다.
예>
도메인: example.com
파일: file.example.com
public 안에 uploads를 심볼릭 링크로 연결해 주시면 됩니다.
또 다른 방법으로는 라우터 설정을 하는 방법도 있고요.