리스트에서 첨부파일 다운로드 적용 관련 문의드립니다.

리스트에서 첨부파일 다운로드 적용 관련 문의드립니다.

QA

리스트에서 첨부파일 다운로드 적용 관련 문의드립니다.

본문

안녕하세요.
리스트에서 첨부파일 다운로드 적용하려고 검색을 해서
아래 소스를 찾았습니다.

 


     <?php
     $sql = " select * from $g5[board_file_table] where bo_table = '". $bo_table. "' and wr_id = '". $list[$i]['wr_id'] ."' order by bf_no ";
     $result = sql_query($sql);
     while ($row = sql_fetch_array($result))
     {
     $down_link = "download.php?bo_table={$bo_table}&wr_id={$list[$i]['wr_id']}&no={$row['bf_no']}";
     $file_source = addslashes($row['bf_source']);
     $file_type = preg_replace('/^.*\.([^.]+)$/D', '$1', $file_source);
     $file_size = get_filesize($row['bf_filesize']);
     if(!in_array($file_type, array('jpg', 'jpeg', 'gif', 'bmp', 'png'))){    //이미지는 제외
        echo "<a href=\"".$down_link."\" title=\"".$file_source."\">";
        echo "<img src='". $board_skin_url ."/filetype/". $file_type .".gif' border=0 align='absmiddle' alt=\"".$file_source."\">({$file_size})";
        echo "</a> ";
       }                        
     }
    ?>

 

적용후 첨부파일 클릭했더니, Not Found 가 떠서
위 소스중 다운로드 경로 아래처럼 bbs/를 추가해줬습니다.

 


     $down_link = "bbs/download.php?bo_table={$bo_table}&wr_id={$list[$i]['wr_id']}&no={$row['bf_no']}";

이렇게 했더니 링크는 제대로 됐는데,


클릭시
"토큰 유효시간이 지났거나 토큰이 유효하지 않습니다. 
브라우저를 새로고침 후 다시 시도해 주세요."
라는 창이 뜨네요.

 

bbs/download.php
에서

if (function_exists('download_file_nonce_is_valid') && !defined('G5_DOWNLOAD_NONCE_CHECK')){
    if(! download_file_nonce_is_valid($nonce, $bo_table, $wr_id)){
        alert('토큰 유효시간이 지났거나 토큰이 유효하지 않습니다.\\n브라우저를 새로고침 후 다시 시도해 주세요.', G5_URL);
    }
}

이 부분을 삭제하면 리스트에서도 정상적으로 첨부파일이 다운 받아지기는 하는데,
이걸 삭제하면 무슨 문제가 생길지 몰라서 삭제하지는 않았습니다.


계속 검색하다보니 아래 팁을 찾았습니다.
https://gnustudy.com/bbs/board.php?bo_table=skin_board&wr_id=91

 


for ($i=0; $i<count($list); $i++) {
바로 밑에 다음 코드를 추가.
$ss_name = 'ss_view_'.$bo_table.'_'.$list[$i]['wr_id'];
if (!get_session($ss_name)) set_session($ss_name, TRUE);
다운로드 링크를 원하는 위치에 추가
<?php if ($list[$i]['file'][0]['file']) { ?>
<a href="<?php echo $list[$i]['file'][0]['href']; ?>">[다운로드]</a>
<?php } ?>

 

이걸 적용하면 아무런 에러 없이 정상적으로 리스트에서 첨부파일이 다운 받아 지긴 하는데, 
무조건 파일#1번에 첨부한 파일이 받아지네요.

파일#1에 이미지를 업로드 했다면 이미지 파일이 받아집니다.

 

맨 처음 소스는 이미지는 안 받아지고, 
파일#1에 이미지가 있고, 파일#2에 .zip등 첨부 파일이 있다면, 
파일#2가 다운받아 지고요.

 

혹시 
맨 처음 소스 "토큰 유효시간을...." 에러가 안뜨게 할 수 있는 방법이나,


두번째 소스 이미지일 경우 다운로드 안 뜨고,

무조건 파일#1이 아닌 파일#1에 이미지, 파일#2에 zip파일일 경우 파일#2가 뜨게 하는 방법 없을까요?

이 질문에 댓글 쓰기 :

답변 2

바로 밑에 다음 코드를 추가.
$ss_name = 'ss_view_'.$bo_table.'_'.$list[$i]['wr_id'];
if (!get_session($ss_name)) set_session($ss_name, TRUE);

<---이것만 for문 다음에 넣으세요

 

친절하신 답변 감사합니다.
그런데, 이미 for문 다음에
$ss_name = 'ss_view_'.$bo_table.'_'.$list[$i]['wr_id'];
if (!get_session($ss_name)) set_session($ss_name, TRUE);
를 넣은 상태인데, 따로 무언가를 해줘야 하는게 있는 건가요?

다운로드 링크 부분을 다음처럼 수정하세요
$nonce = download_file_nonce_key($bo_table, $list[$i]['wr_id']); //추가
    while ($row = sql_fetch_array($result))
    {
    $down_link = "download.php?bo_table={$bo_table}&wr_id={$list[$i]['wr_id']}&no={$row['bf_no']}&amp;nonce=$nonce"; //마지막 nonce 부분 추가

1.이 부분을 삭제하면 리스트에서도 정상적으로 첨부파일이 다운 받아지기는 하는데,
이걸 삭제하면 무슨 문제가 생길지 몰라서 삭제하지는 않았습니다.

파일이 특정인에게만 다운받게해야하는게 아니면 삭제해도상관없습니다. 

2.
<?php if ($list[$i]['file'][0]['file']) { ?>
<a href="<?php echo $list[$i]['file'][0]['href']; ?>">[다운로드]</a>
<?php } ?>

0 말고 1로 한번 수정해보세요

답변을 작성하시기 전에 로그인 해주세요.
전체 402
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT