제목 | [PHP] 오라클의 long raw타입의 데이터(파일데이터)를 쿼리하여, 파일 다운로드 하는 방법 | ||
---|---|---|---|
카테고리 | PHP | ||
글쓴이 | layman | 작성시각 | 2017/09/21 16:55:31 |
|
|||
db에 long raw타입 데이터(파일정보)가 있어요.
이걸 쿼리 결과로 가져와서, 파일을 다운로드하려합니다.
예전에 long raw타입데이터를 가져와서 img태그로 보여줄 때에는 "<img src='data:image/gif;base64," . base64_encode($row['DATA'][0]) . "'/>"; 이런 식으로 사용을 했었는데요.
이번엔 <a href="/file/file_download" file_id="xxx">다운로드</a>
model.php에서 $this->db->where('file_id', 'xxx'); $q = $this->db->get('files'); if($q->num_rows() > 0) { $r = $q->row_array(); }
이렇게하여 $r['DATA']; 안에 long raw타입의 데이터가 들어가있는 상태에요. 파일을 다운로드하게하려면 어떻게 구현해야할지 잘 모르겠어요.
도움주시면 감사하겠습니다. |
|||
다음글 | 완전 초보 질문드립니다. (3) | ||
이전글 | 파일 경로가 맞는데 호출이 안됩니다. (1) | ||
변종원(웅파)
/
2017/09/21 21:43:56 /
추천
0
|
layman
/
2017/09/22 09:52:16 /
추천
0
1. force_download($data['FILEREMARK'], $data['FILEDATA']);
2. $handle = fopen($data['FILEREMARK'], 'w');
fwrite($handle, $data['FILEDATA']);
fclose($handle);
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($data['FILEREMARK']));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($data['FILEREMARK']));
readfile($data['FILEREMARK']);
exit;
$data['FILEREMARK']는 파일명이구요. $data['FILEDATA']는 long raw 타입 데이터입니다. (4D5A90000300000004000000FFFF0000B800000000000000 ...) 두 가지 방법 모두 반응이 없습니다. |
layman
/
2017/09/22 11:12:01 /
추천
0
1,2번 두 방법 모두 개발자도구 response에
이렇게 출력되고 다른 반응은 없네요.
|
변종원(웅파)
/
2017/09/22 11:26:30 /
추천
0
오라클이네요. ^^;; 화면출력을 먼저하고 ob_start 함수로 화면출력을 파일로 저장해야할 것 같네요. http://php.net/manual/kr/function.ob-start.php 오라클 php 이미지 입출력 참고 - https://docs.oracle.com/cd/E17781_01/appdev.112/e18555/ch_twelve_blobs.htm#TDPPH187 |
layman
/
2017/09/22 14:29:09 /
추천
0
Ajax get방식으로 /etc/file_download/17 < 17은 파일 고유ID 다운로드 하는 코드
response header에 파일 데이터가 읽혀졌습니다. 이제 파일 다운로드가 자동으로 실행되게끔 해야하는데.. 이건 원래 php에서 force_download실행하면 자동으로 브라우저에서 다운로드 창이 팝업되지 않나요? 따로 추가해야 할 코드가 있을지.. 거의 다 온거 같은데 다운로드 팝업창이 안뜨고있네요. |
layman
/
2017/09/22 14:58:54 /
추천
0
특이사항
- 주소창에 /etc/file_download/17 으로 입력하고 엔터누르면 이상하게 또 바로 파일다운로드가 자동으로 됩니다. 그런데 현재 ajax get방식으로 /etc/file_download/17으로 요청을 하면, repsonse header에 데이터가 찍히고 아무런 액션이 없습니다. |
layman
/
2017/09/25 11:26:39 /
추천
0
document.location = url로 해결했습니다~ ㅎㅎ
|
변종원(웅파)
/
2017/09/25 13:36:48 /
추천
0
ajax는 당연히 해당내용을 리턴하고 맙니다. 최초 답변내용에 맞는건데 내용을 잘못 넣으셨네요.
|
바이너리이니 fwrite() 함수로 파일로 만드시고 다운로드 해도 되고
ci의 force_download() 함수로 바로 다운로드해도 될 것 같습니다.