공홈에 등록된 첨부파일을 외부로! 의 사용법이 궁금합니다.

https://xe1.xpressengine.com/index.php?mid=download&package_id=22753684

 

본문에 첨부된 사용법 링크는 사라졌네요...

 

설정에는 업로드서버주소, 업로드폴더, 비밀키를 입력받게 되있네요.

 

업로드 서버에 뭔가를 따로 설정해줘야 비밀키를 통해 접속 할것같습니다.

 

lua_external_file.addon.php

<?php
if(!defined('__XE__')) exit();

if(Context::get("act") == "procFileDownload" && $called_position == "before_module_proc"){
$oFM = getModel("file");

$columnList = array('source_filename', 'uploaded_filename', 'upload_target_srl', 'module_srl');
$file_obj = $oFM->getFile(Context::get("file_srl"), $columnList);

if(str_replace("index.php", "", $file_obj->uploaded_filename) != $file_obj->uploaded_filename) return;

$ch = curl_init();

$sk = explode("/", $file_obj->uploaded_filename);
array_pop($sk);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array( 'key' => $addon_info->secret, 'dir' => implode("/", $sk), 'file' => '@' . $file_obj->uploaded_filename . ';filename=' . Context::get("file_srl")));
curl_setopt($ch, CURLOPT_URL, "http://" . $addon_info->upload . "/upload.php");

curl_exec($ch);
curl_close($ch);

$args = new stdClass;
$args->file_srl = Context::get("file_srl");
$args->uploaded_filename = "index.php?addon_ext=external_file&file_srl=" . Context::get("file_srl");
$args->module_srl = $file_obj->module_srl;
$args->upload_target_srl = $file_obj->upload_target_srl;
executeQuery('file.updateFile', $args);

@unlink($file_obj->uploaded_filename);
}

if(Context::get("act") == "procFileOutput" || Context::get("addon_ext") == "external_file"){
$oFM = getModel("file");

$columnList = array('source_filename', 'uploaded_filename', 'upload_target_srl', 'module_srl', 'direct_download');
$file_obj = $oFM->getFile(Context::get("file_srl"), $columnList);

$types = "binaries";
if($file_obj->direct_download == "Y") $types = "images";

$url = "http://" . $addon_info->upload . "/" . $addon_info->upload_fol . "/files/attach/" . $types . "/" . $file_obj->module_srl . "/" . $file_obj->upload_target_srl . "/" . Context::get("file_srl");
$buff = FileHandler::getRemoteResource($url, null, 3, 'GET', "image/png");

header("Cache-Control: ");
header("Pragma: ");

$t = "application/octet-stream";

header("Content-Type: " . $t);
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

header("Content-Length: " .sizeof($buff));
header('Content-Disposition: attachment; filename="'.$file_obj->source_filename.'"');
header("Content-Transfer-Encoding: binary\n");

echo $buff;

exit();
}

 

info.xml

<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
    <title xml:lang="ko">외부 첨부파일 애드온</title>
    <description xml:lang="ko">
첨부파일을 외부로 업로드 시키는 애드온입니다.
    </description>
    <version>0.0.3</version>
    <date>2015-06-16</date>

    <author email_address="[email protected]" link="http://www.luacast.io/">
        <name xml:lang="ko">LuaCast</name>
    </author>
    <extra_vars>
        <var name="upload">
            <title xml:lang="ko">업로드 서버</title>
            <description xml:lang="ko">외부 서버의 도메인 주소를 입력해 주세요. ( 예시 - 도메인 )</description>
     </var>
   <var name="upload_fol">
            <title xml:lang="ko">업로드 폴더</title>
            <description xml:lang="ko">외부 서버에 업로드 될 폴더 명을 입력해 주세요. ( 예시 - upload )</description>
     </var>
   <var name="secret">
            <title xml:lang="ko">비밀 키</title>
            <description xml:lang="ko">외부 서버에 인증을 위한 비밀 키를 입력해 주세요.  ( 예시 - HFRmnQ9hTNGZvFQq )</description>
     </var>
 </extra_vars>
</addon>

 

  • profile
    허어... 자료실에 올려진 자료가 최신이 아니었네요;

    https://xe1.xpressengine.com/forum/23063012

    작동이 안된다는 댓글이 많은데...
  • profile ?
    작동 되서 잘 사용하곤 있습니다.
    다만 작성자분이 배우시는 입장이고 시간이 없으셔서 관리를 잘 안하시는데 오해도 많이 사시고 해서, 떠나시다 시피 한것같아요.
  • ?

    작동되던걸 확인하고 운영하던 사이트에선 꺼뒀는데 여기 글에 위화감이 들어서 다시 한 번 켜봤는데 저도 업로드가 안되네요..

    버전업하면서 뭔가 문제가 생긴게 아닌가 싶습니다..분명한건 제것은 1.8.11 이전버전이라서 이후버전의 치명적인 보안이슈 관련한 문제는 아닌거같네요

  • ?

    그래서 말나온 김에 나름 조사를 해 봤네요

    우선 첨부파일기능이다보니..

     

    1 이미지프로세스모듈처럼 첨부물에 편집을 다루는 모듈이랑 간섭이 있는 모양입니다. 그래서 이미지프로세스 대상이 되는 파일은 업로드는되는데 정상적으로 화면출력이 안되네요

    2 사이트에서 해당 서버 첨부물을 불러오질 못하고 있는 이유는 잘 모르겠습니다..

    3 음..그리고 확신하지 못하겠는 부분은

    완전히 첨부파일이 외부서버로 독립되었는지 잘 모르겠습니다. 관리자페이지에서 콘텐츠/파일경로로 확인해보면 첨부물의 썸네일은 코어의 files폴더에 작게 지정되고 있는걸로봐서 코어도 해당 파일의 일부분?을 가지고 있는것같은데...

    캠핑님은 저보다 더 잘아시니 뭔가 단서를 얻으시리라 생각합니다 ^^