CI 묻고 답하기

제목 ci4 첨부파일의 업로드 경로
카테고리 CI 4 관련
글쓴이 노정호 작성시각 2020/11/27 16:55:02
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 10721   RSS

안녕하세요.

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');
        }
    }

 

 다음글 Ci3( custom_result_object() ) (2)
 이전글 CI4 unit test (2)

댓글

빛그림 / 2020/11/27 16:57:37 / 추천 0

public 안에 uploads를 심볼릭 링크로 연결해 주시면 됩니다.

또 다른 방법으로는 라우터 설정을 하는 방법도 있고요.

PureAni / 2020/11/27 17:07:58 / 추천 0

티스토리처럼 URL을 부르면 file controller 에서 해당 파일의 값을 넘겨주는 방법도 있습니다.

아니면 처음부터 uploads 에 올리는것도 방법입니다.

한대승(불의회상) / 2020/11/27 17:28:50 / 추천 0

linux라면 디렉토리를 마운트하는 방법도 있습니다.

https://www.tuwlab.com/ece/10064

노정호 / 2020/11/27 17:35:42 / 추천 0

답변 감사드립니다.

공부하는 단계이므로 가장 간단해보이는 심볼릭 링크로 해결하였습니다.

$ cd public

$ ln -s ../writable/uploads .

 

노정호 / 2020/11/27 17:38:56 / 추천 0
// 이미지 출력은 이렇게 하니 잘 나오네요.
// $bl_file['save'] = "blog/file_name.jpg"
<img src="<?= base_url('/uploads/' . $bl_file['save'])?>" alt="">
테러보이 / 2020/11/27 17:56:07 / 추천 0

저희 같은경우는

저장파일 경로는 따로 도메인 잡고 해당 도메인에서 php가 작동되지 않게 한다음 불러다 씁니다.

 

예>

도메인: example.com

파일: file.example.com