CI 묻고 답하기

제목 파일 업로드를 upload 라이브러리를 사용하면서, view에서 jabascrit+ajax로 구현할수 있는 방법이 있을까요?
카테고리 CI 2, 3
글쓴이 그동안 작성시각 2019/05/21 14:05:11
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 19488   RSS

안녕하세요, 코드이그나이터 파일 업로드 관련해서 form태그로 파일 업로드 성공했는데요.

( $this->load->library('upload') 라이브러리를 사용했습니다 )

그런데...form 태그를 사용하는게 싫어서, 웹사이트 전반에 걸쳐서 jabascrit+ajax를 사용해서 컨트롤러로 값을 넘기고 있습니다.

코드이그나이터 upload 라이브러리를 사용하면서 view에서 jabascrit+ajax로 구현할수 있는 방법이 있을까요?

 

예) 아래 처럼 5개 항목이 있을때, 사진첨부 하나 때문에 form 태그를 사용하는게 마땅치 않거든요.

사진첨부 :  

한줄소개 : 

제목 : 

내용 : 

작성자 : 

 

[현재 ajax 코드 : 업로드 실패라고 나옵니다]

<script>
    $("#add_01_insert_btn").click(function()                                                    //다음 버튼 클릭 시
    { 
	    //스크립트 변수 정리
	    var introduce = $('#introduce').val();                                                  //한줄소개

		//폼 벨리데이션
		if ($("#introduce").val() == '')
		{
			alert('한줄 소개를 입력해주세요');
			$("#ntroduce").focus();  
			return false;
		} 

        $.ajax ({ 
	       	url : "/my_freelancer/my_profile_add_01" ,
	       	type : "POST" ,
	       	fileElementId	:'userfile',
	       	dataType : "json" ,
	       	data : {
				   introduce : introduce 			   
				   },
		    success : function(result)                                           //성공 시  
		    {	
				alert("1단계 저장완료 했습니다");	 
		    },
		    error : function(request,status,error)                               //실패 시 
		    {
                alert(request.status + " 에러가 발행해서 1단계 저장하지 못했습니다");
            }
        });
	});
</script> 

 

[html 코드]

<li class="p-photo">
	<div class="avatar">
		<span>프로필 사진</span>
	</div>
	<div class="file-box abs">
		<label for="userfile" class="btn-bkl">업로드</label>
		<input type="file" name="userfile" id="userfile" />
	</div>
</li>
<li>
	<span class="stit">한줄 소개</span>
	<div class="self-intro">
		<input type="text" title="한줄 자기소개" placeholder="20자 이내로 타이틀을 입력하세요" value='' name='introduce' id='introduce' />
	</div>
</li>

   

 다음글 안녕하세요 core/MY_Loader.php 만들때 질... (2)
 이전글 linuxOS + nginx + PHP7 + CI 에서... (2)

댓글

변종원(웅파) / 2019/05/21 15:39:28 / 추천 0

개념에 대해 조금만 생각하시면 바로 무릎을 딱 치실건데요.

컨트롤러에 upload 라이브러리로 파일업로드 처리하는 메소드 하나 만드시고 ajax로 파일을 post 전송해보세요.

다를거 없습니다. 폼태그를 쓰느냐 ajax를 사용하느냐 차이밖에 없습니다.

라우저 개발자 도구에서 넘긴 값과 처리하고 난후의 값을 출력해보세요. 어딘가 어긋나있을겁니다.

kaido / 2019/05/21 15:46:40 / 추천 0

업로드 라이브러리 한번 뜯어보시면 쉽게 이해 하실수 있습니다

기존에 떠돌아다니는 php 업로드 소스보다도 심플하거든요.

다만 ajax로 파일 업로드 할때는 주의점이 조금 있습니다.

이부분을 간단하게 처리하기 위해서 개인적으론 jquery form 라이브러리를 써서 처리했습니다.

그동안 / 2019/05/21 16:31:55 / 추천 0

두분 답변 댓글 감사합니다. 파일 업로드 개발은 첨해봐서 개념이 좀 없습니다;;

웅파님!!  파일의 로컬경로를 ajax post로 넘겼는데요. 

userfile: C:\fakepath\abcdefg.jpg

컨트롤러쪽에서 200에러 나오네요.  컨트롤러에서 파일경로를 어떻게 받아야 할까요?
변종원(웅파) / 2019/05/21 17:09:03 / 추천 0

파일경로를 넘기는게 아니라 파일을 전송하셔야.... 컨트롤러 소스가 있어야 답변 가능하겠네요.

다른 분들이 만드신거 참고도 해보세요.

http://sample.cikorea.net/ci20/sample_view/class/upload

그동안 / 2019/05/21 17:23:09 / 추천 0

form 방식으로 했을때 db까지 data들어가는 거 확인했으니, 컨트롤러 문제는 아닌 것 같은데요.

여튼 한번 더 고민.적용해보고 안되면 그때 또 물어보도록 할께요~~ 감사합니다