제목 | 다운로드 문제 | ||
---|---|---|---|
글쓴이 | 코드초보 | 작성시각 | 2015/04/03 10:14:29 |
|
|||
안녕하세요. '만들면서 배우는...' 책을 따라하면서 배우고 있는 초보입니다. 질문하기 앞서 여러 게시판을 검색해 봤지만 저와 같은 경우가 없어서 질문 올립니다. 질문: 파일을 눌러서 다운하면 다운파일이 손상되있습니다. 서버에 올려진 파일을 열어보면 정상적으로 열립니다. 그리고 서버에 올려진 화일과 다운파일 용량은 같습니다. 아래는 다운로드 코드입니다.(action/download) function download() { $this->db->select('original_name, file_name'); $qry = $this->db->get_where('files', array( 'module_name' => $this->uri->segment(5), 'module_no'=> $this->uri->segment(3), 'no' => $this->uri->segment(4) )); $file = $qry->row_array(); if (!isset($file['file_name'])) alert("파일 정보가 존재하지 않습니다."); $original_name = $file['original_name']; $this->load->helper('download'); $data = file_get_contents($this->input->server('DOCUMENT_ROOT')."/data/files/".$file['file_name']); if(! force_download(mb_convert_encoding($original_name,'euc-kr','utf8'), $data)) alert('파일을 찾을 수 없습니다.'); } 파일 : original_name;?> 그리고 위에 보시면 전달할 방법을 몰라 그냥 테이블이름을 url로 전달했는데 더좋은 방법이 있으시면 말씀해 주세요. |
|||
다음글 | html 한번에 출력하기 (1) | ||
이전글 | csrf iframe에서 작동안하나요..? (1) | ||
변종원(웅파)
/
2015/04/03 17:10:27 /
추천
0
|
코드초보
/
2015/04/06 09:23:22 /
추천
0
웅파님 답변 감사합니다.
다른 컴퓨터들에서 다운해도 마찬가지 입니다. 다운로드 화일을 메모장으로 열어보면 약간 변형이 있는것 같습니다. 가령 압축파일을 다운해서 풀어보면 헤더가 손상 되었다고 나옵니다. ;;; |
변종원(웅파)
/
2015/04/06 11:14:44 /
추천
0
서버 구성(apm?) 정보를 올려주셔야 할 것 같고.
force_download를 사용하지 말고 그냥 a 태그에 파일링크를 걸어서 다운받아보세요. 제대로 열리면 ci의 문제이고 그것도 동일하게 안열리면 서버 또는 기타 환경적 문제입니다. |
코드초보
/
2015/04/06 18:27:09 /
추천
0
안녕하세요. 웅파님~
서버구성은 centos6.6, apache 2.2.15, php 5.3.3, mysql 14.1 입니다. 그리고 http://192.168.120.245/data/files/ 이런식으로 접근하여 화일 다운해서 보면 정상적으로 보입니다. 그런데, <a href="http://192.168.120.245/data/files/4821a80a7f4b92fb4f63ffb0000d3596.txt">다운로드 </a> 이렇게 링크걸고 다운하면 화일이 깨져서 보이네요. ;; 초보인지라 어디를 손봐야 할지도 모르겠고, 몇일째 답보 상태 입니다.;;;; 혹시 아파치나 php 등 mime 설정을 해야할까요?? |
코드초보
/
2015/04/07 10:35:38 /
추천
0
웅파님 답변 항상 고맙습니다.
문제는 해결 했습니다만, 원인이 무엇인지는 모르겠네요. ;; $data = $this->input->server('DOCUMENT_ROOT')."/data/files/".$file['file_name']; header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename(iconv('UTF-8','EUC-KR',$file['original_name']))); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); ob_clean(); flush(); readfile($data); 위와 같이 코드를 변경하니 이상없네요. ~ 저와 같은 경험인분 참고 하세요.~ |
변종원(웅파)
/
2015/04/07 10:49:23 /
추천
0
octet-stream 넣은것 보니 샘플의 확장자는 txt인데 다른 포맷인거 같네요.
(확장자와 실제 포맷이 다르면 문제가 생길 수 있습니다. 해킹용 exe파일을 gif로 고쳐서 올리는 경우..) |
혹시 모르니 다른 컴퓨터에서 다운로드 해보세요.