728x90
반응형

게시글을 쓸때 고려해야 할 사항을 우선 기술한다. 추후 글의 수정 및 삭제에 대하여 기술한다.

이 글을 작성하기 위하여 우선적으로 이해해야 할 사항은 엮인 글과 그에 엮인 글을 참고한다.

1. file_uploader_html5.jsp 수정사항

  - 이 단계에서는 본문에 추가하기 위하여 사진 버튼을 누른 상태에서

  - 사진 파일이 서버의 특정 위치 (upload)에 저장된 상태이다.

  - 사진 파일에 대한 정보를 임시적으로 저장한다.

  - 이 파일은 본문에 추가되는 사진 하나에 대하여 수행된다. 따라서 본문에 추가되는 사진이 여러 개일 경우 반복 수행된다.

  - file_uploader_html5.jsp의 내용은 http://ksseo63.blog.me/220498584408을 참고한다.


AddRequest addRequest = new AddRequest();

addRequest.setFileName(name);

file = new File(storedFileName);

addRequest.setFileSize(file.length());

addRequest.setRealPath(storedFileName);

addRequest.setDescription("이미지"); // 첨부를 구별짓는 방법 : 1. 이미지, 2. 게시글

SmartEditorImageManager imageManager = SmartEditorImageManager.getInstance();

List<AddRequest> imageList = imageManager.getImageList();

if(imageList == null) {

imageList = new ArrayList<AddRequest>();

imageManager.setImageList(imageList);

}

imageList.add(addRequest);


1.1 AddRequest.java : 파일 정보를 저장하기 위해 필요한 정보를 저장하는 클래스

package com.talanton.homepage.pds.model;


public class AddRequest {

private String fileName;

private long fileSize;

private String realPath;

private String description;

private int articleId;

private boolean into = false;

public String getFileName() {

return fileName;

}

public void setFileName(String fileName) {

this.fileName = fileName;

}

public long getFileSize() {

return fileSize;

}

public void setFileSize(long fileSize) {

this.fileSize = fileSize;

}

public String getRealPath() {

return realPath;

}

public void setRealPath(String realPath) {

this.realPath = realPath;

}

public String getDescription() {

return description;

}

public void setDescription(String description) {

this.description = description;

}

public int getArticleId() {

return articleId;

}

public void setArticleId(int articleId) {

this.articleId = articleId;

}

public boolean isInto() {

return into;

}

public void setInto(boolean into) {

this.into = into;

}

public PdsItem toPdsItem() {

PdsItem item = new PdsItem();

item.setFileName(fileName);

item.setFileSize(fileSize);

item.setRealPath(realPath);

item.setDescription(description);

item.setArticleId(articleId);

return item;

}

}


1.2 SmartEditorImageManager.java : 본문에 첨부되는 사진들에 대한 정보를 저장하는 클래스

package com.talanton.homepage.common.utilities;


import java.util.List;

import com.talanton.homepage.pds.model.AddRequest;


public class SmartEditorImageManager {

private static SmartEditorImageManager instance = new SmartEditorImageManager();

public static SmartEditorImageManager getInstance() {

return instance;

}

private SmartEditorImageManager() { }

private List<AddRequest> imageList = null;

      public List<AddRequest> getImageList() {

return imageList;

}

public void setImageList(List<AddRequest> imageList) {

this.imageList = imageList;

}

public boolean isHasImage() {

return !imageList.isEmpty();

}

}


2. writeForm.js : form(submit) 버튼을 눌렀을 때, 실제 본문에 삽입된 사진을 처리하기 위하여 js에서 수행

    //전송버튼 클릭이벤트

    $("#addBtn").click(function(){

        //id가 smarteditor인 textarea에 에디터에서 대입

        editor_object.getById["smarteditor"].exec("UPDATE_CONTENTS_FIELD", []);

         

        // 이부분에 에디터 validation 검증

        var el = document.createElement('html');

        el.innerHTML = editor_object.getById["smarteditor"].elPlaceHolder.value;

        var imageF = el.getElementsByTagName('img');

        var url = ctx + "/smarteditor/photo_uploader/popup/file_uploader_real.jsp";

        var params = "";

        for(var i = 0;i < imageF.length;i++) {

        if(i == 0)

        params += ("src=" + imageF[i].src + "&title=" + imageF[i].title);

        else

        params += ("&src=" + imageF[i].src + "&title=" + imageF[i].title);

        }

        sendRequest(url, params, callbackFunction, "POST");

        callTimerProcessing();

    })


    // 본문에 삽입된 사진에 대한 처리(file_uploader_real.jsp)를 먼저하기 위하여 timer loop를 돌린다.

    // 잘못하면 form(submit) 버튼을 처리하는 write.jsp가 먼저 수행될 수 있기 때문이다.

    function callTimerProcessing() {

    if(loop) {

    setTimeout(function() {

        callTimerProcessing();

        }, 100);

    }

    else {

            //폼 submit

            $("#frm").submit();

    }

    }


3. file_uploader_real.jsp : Ajax에 의하여 불리며, 실제 본문에 삽입되는 파일에 대한 정보를 별도로 표시

<%@page import="com.talanton.homepage.pds.model.AddRequest"%>

<%@page import="java.util.List"%>

<%@page import="com.talanton.homepage.common.utilities.SmartEditorImageManager"%>

<%@page import="java.io.PrintWriter"%>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%

response.setHeader("Pragma", "No-cache");

response.setHeader("Cache-Control", "no-cache");

response.addHeader("Cache-Control", "no-store");

response.setDateHeader("Expires", 1L);

request.setCharacterEncoding("utf-8");

String[] src = request.getParameterValues("src");

String[] title = request.getParameterValues("title");

SmartEditorImageManager imageManager = SmartEditorImageManager.getInstance();

List<AddRequest> imageList = imageManager.getImageList();

if(imageList != null) {

for(int i = 0;i < src.length;i++) {

int srcIndex = src[i].lastIndexOf("/");

String srcName = src[i].substring(srcIndex + 1);

for(int j = 0;j < imageList.size();j++) {

AddRequest addRequest = imageList.get(j);

String realPath = addRequest.getRealPath();

int addIndex = realPath.lastIndexOf("\\");

String addString = realPath.substring(addIndex + 1);

if(srcName.equals(addString)) {

addRequest.setInto(true);

break;

}

}

}

}

%>


4. write.jsp : form(submit) 버튼에 의하여 수행되는 jsp 파일

  - 실제 본문에 삽입되는 사진 파일을 데이터베이스에 저장하고, 사진 첨부로 선택은 되었지만 사용자가 본문에서 삭제한 사진 파일은 서버의 저장공간에서 삭제한다. 데이터베이스에도 저장하지 않는다.

SmartEditorImageManager imageManager = SmartEditorImageManager.getInstance();

List<AddRequest> imageList = imageManager.getImageList();

if(imageList != null) {

for(int i = 0;i < imageList.size();i++) {

AddRequest addRequest = imageList.get(i);

if(addRequest.isInto()) {

addRequest.setArticleId(postedArticle.getId());

AddPdsItemService.getInstance().add(addRequest);

}

else {

File file = new File(addRequest.getRealPath());

if(file.exists()) {

file.delete();

}

}

}

imageManager.setImageList(null);

 

}


추후 수정과 삭제에 의하여 생기는 쓰레기를 처리한다. (스마트 에디터를 적용하고 나서 생기는 본문에 삽입되는 사진 파일에 대한 것은 아직 고려되지 않았다.)

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,