윈도우 라이브 라이터로 Textyle에 글을 작성할 경우 이미지 파일이 깨져 보이는 현상이 발생..
원인을 찾아보니..
라이브 라이터에서 aaa.jpg 라는 파일을 첨부하면
본문에는 <img src="$aaa.jpg"> 라고 태그가 생성되어 본문이 작성된다..
하지만 XE 에서는 파일 업로드 시 base64 인코딩을 해서
asdgqerhq34gh35hgq3gq3h.jpg 와 같이 암호화 된 파일명으로 변경되게 된다..
그러다 보니 본문에서 aaa.jpg 를 불러오려 해봤자 파일을 찾을 수 없어 엑박이 뜨게 된다.
이를 해결하기 위해 아래와 같이 수정했다.
1. /xe/addons/blogapi/blogapi.addon.php 의 line 208 정도에
case 'metaWeblog.newPost': 라는 곳이 있다. 새글 작성할 경우 이곳에서 처리가 되는데.. 이중에
첨부 파일 정리를 하는
대충 line 258 정도에
$oFileController->insertFile($file_info, $this->module_srl, $document_srl, 0, true); 라는 곳이 있다.
이곳을
$oFile = $oFileController->insertFile($file_info, $this->module_srl, $document_srl, 0, true); 로 바꾼다...그리고 바로 아랫줄에
$obj->content = str_replace($file_info['name'], $oFile->get('upload_filename'), $obj->content); 라고 추가 해준다.
설명 하자면...
$oFileController->insertFile() 결과를 $oFile 변수에 담는다....
그리고 두번째 줄은 본문 내용은 파일 네임이 들어간 부분을(aaa.jpg 라고 되어 있는 부분을) 암호화된 파일명으로 교체(replcae) 시키다.
이로써 본문의 내용중 <img src="aaa.jpg">는 <img src="asdgqerhq34gh35hgq3gq3h.jpg"> 로 바뀌게 된다.
2. 게시물을 수정할 때는 기존에 올렸던 파일을 다시 첨부하는게 아니고 본문 내용만 그대로 가져가므로 본문 내용중 파일 이름과 일치 하는 곳은 수정해야 된다.
line 283 쯤에
case 'metaWeBlog.editPost' : 라는 곳을 수정한다.
line 366 쯤에 $obj->content = str_replace( ......생략 이런 부분이 있는데.. 바로 위에 아래 내용을 추가 한다.
$oFileModel = $getModel('file');
$file_list = $oFileModel->getFile($document_srl); // 현재 게시물에 있는 첨부 파일 리스트를 가져온다.
if(count($file_list)){ // 첨부 파일이 있다면
foreach($file_list as $file)
{
$obj->content = str_replace($file->source_filename, $file->upload_filename, $obj->content); // 본문 중 실제 파일명과 같은 부분을 암호화 된 파일명으로 변경
}
}
이렇게만 수정해 주면 끝...
다만 윈도우 라이브 라이터가 한글 파일을 지원하지 않는다..
원인을 찾아보니..
라이브 라이터에서 aaa.jpg 라는 파일을 첨부하면
본문에는 <img src="$aaa.jpg"> 라고 태그가 생성되어 본문이 작성된다..
하지만 XE 에서는 파일 업로드 시 base64 인코딩을 해서
asdgqerhq34gh35hgq3gq3h.jpg 와 같이 암호화 된 파일명으로 변경되게 된다..
그러다 보니 본문에서 aaa.jpg 를 불러오려 해봤자 파일을 찾을 수 없어 엑박이 뜨게 된다.
이를 해결하기 위해 아래와 같이 수정했다.
1. /xe/addons/blogapi/blogapi.addon.php 의 line 208 정도에
case 'metaWeblog.newPost': 라는 곳이 있다. 새글 작성할 경우 이곳에서 처리가 되는데.. 이중에
첨부 파일 정리를 하는
대충 line 258 정도에
$oFileController->insertFile($file_info, $this->module_srl, $document_srl, 0, true); 라는 곳이 있다.
이곳을
$oFile = $oFileController->insertFile($file_info, $this->module_srl, $document_srl, 0, true); 로 바꾼다...그리고 바로 아랫줄에
$obj->content = str_replace($file_info['name'], $oFile->get('upload_filename'), $obj->content); 라고 추가 해준다.
설명 하자면...
$oFileController->insertFile() 결과를 $oFile 변수에 담는다....
그리고 두번째 줄은 본문 내용은 파일 네임이 들어간 부분을(aaa.jpg 라고 되어 있는 부분을) 암호화된 파일명으로 교체(replcae) 시키다.
이로써 본문의 내용중 <img src="aaa.jpg">는 <img src="asdgqerhq34gh35hgq3gq3h.jpg"> 로 바뀌게 된다.
2. 게시물을 수정할 때는 기존에 올렸던 파일을 다시 첨부하는게 아니고 본문 내용만 그대로 가져가므로 본문 내용중 파일 이름과 일치 하는 곳은 수정해야 된다.
line 283 쯤에
case 'metaWeBlog.editPost' : 라는 곳을 수정한다.
line 366 쯤에 $obj->content = str_replace( ......생략 이런 부분이 있는데.. 바로 위에 아래 내용을 추가 한다.
$oFileModel = $getModel('file');
$file_list = $oFileModel->getFile($document_srl); // 현재 게시물에 있는 첨부 파일 리스트를 가져온다.
if(count($file_list)){ // 첨부 파일이 있다면
foreach($file_list as $file)
{
$obj->content = str_replace($file->source_filename, $file->upload_filename, $obj->content); // 본문 중 실제 파일명과 같은 부분을 암호화 된 파일명으로 변경
}
}
이렇게만 수정해 주면 끝...
다만 윈도우 라이브 라이터가 한글 파일을 지원하지 않는다..