개발 Q&A

제목 ci4 파일 업로그 후 링크방법
카테고리 PHP
글쓴이 장까망 작성시각 2024/04/07 09:18:31
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 548   RSS

안녕하세요,

초보 개발자입니다. CI4.4.6.

 

매뉴얼에 따라서 파일업로드도 구현했으며 파일 다운로드도 구현하였습니다.

하지만, 단순한 파일 링크가 안되서 문의드립니다.

 

개념적인 질문 드립니다.

파일을 업로드하면 /writable 디렉터리에 저장이 됩니다. 이 파일을 강제로 다운로드는 가능하지만 <audio> 코드의 <src="">로 링크는 동작하지 않습니다. 구글링을 통해서 /writable 디렉토리에는 직접적인 접근이 불가능하니 /public 폴더에 파일을 저장하라는 의견을 찾았습니다.  실제로 /public에 파일을 옮겨놓고 audio src="" 링크를 테스트하면 정상작동합니다.

진정 사용자의 파일 업로드는 /public 에 업데이트 해야 하나요? 

 

두번째 질문 드립니다.

위에서 언급한 내용에 따라서 사용자의 파일 업로드를 기존 /writabel 에서 /public 으로 변경 하려고 합니다.

이때 영문매뉴얼을 따라서 아래의 내용을 보는데...

        $userfile = $this->request->getFile('userfile');  // form의 데이터 받기

        $filepath = WRITEPATH . 'uploads/' . $userfile->store();  // 파일 저장

 

파일 저장 부분에서 여러 값을 변경해보아도 항상 기본 값인 WRITEPATH 에 저장이 됩니다. ( /writable 디렉토리 )

/public 에 저장하는 방법을 문의드립니다.

 

 

 다음글 CI4 버전에서 DB세션 관련 (3)
 이전글 ci3 사용중 query select 후 자동 comm... (2)

댓글

kaido / 2024/04/08 13:19:09 / 추천 0

1. writable 에 접근이 안되는건 ci 가 문제가 아니라 [nginx, apache] 같은 미들웨어가 접근을 못해서 생기는 문제입니다.

writable 해당 경로로 프록시를 별도로 따준 다음에 접근 시키면 접근 가능 합니다.

2. 

//멀티 업로드 샘플 name = images[]
$thumbnail_upload_data = [];
        if ($imagefile = $this->request->getFiles()) {
            foreach ($imagefile['images'] as $img) {
                if ($img->isValid() && !$img->hasMoved()) {
                    $newName = $img->getRandomName();
                    array_push($thumbnail_upload_data, ["img_url" => $newName]);
                    $img->move(ROOTPATH . 'public/uploads/', $newName);
                }
            }
        }

 

제가 사용하는 멀티업로드 방식 입니다.

단일 업로드만 하실거면 변경해서 사용하시면 잘 적용 되실것입니다.

장까망 / 2024/04/08 14:09:15 / 추천 0

좋은 답변 감사합니다. 

'writable 해당 경로로 프록시를 별도로 따준 다음에' 라는 말을 이해할 수는 없었지만, 보여주신 ROOTPATH . 'public/uploads' 코드가 저에게 큰 도움이 되었습니다. 많은 것을 배웠습니다.