우선 이와 같은 폴더를 생성해줍니다.
각 버전에 맞는 폴더가 구성 되어 있어야하고
또 추후에 새로운 웹진을 등록할 수 있어야 합니다.
해당 웹진을 서버에 올릴려면
링크에 따라 해당 버전 웹진을 띄워 줄 수 있는 Url이 필요합니다.
웹진Contorller
package joonho.controller.user;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import koddi.controller.CommonController;
@Controller
@RequestMapping("/webzine/*.jsp")
public class WebzineController extends CommonController {
//@RequestMapping
//public String index() throws Exception {
// return "/webzine/index";
//}
@RequestMapping
public String joonho(@RequestParam String vol) throws Exception {
return "redirect:/webzine/joonho/vol" + vol + "/index.html";
}
}
해당 경로로 들어 오는 모든 url 은 해당 vol 값을 보고 판단하여
매핑을 시켜 준다.
추가적으로 개발해주어야 할 것
관리자 페이지에서 웹진 zip 파일을 업로드하면
추가 작업 없이 해당 URL로 웹진 서비스가 구동 되어야한다 .
용량이 커서 zip 파일로 오기 때문에
업로드 시에 자동으로 해당 zip 파일이 압출 해제가 되어
저장 되어야 한다.
업로드 HTML
<tr>
<th><span>*</span> $!searchParam.brdTypeNm 웹진파일</th>
<td>
<input type="file" name="attachFile4_" required alt="$!searchParam.brdTypeNm 웹진파일" class="file_board" style="width:200px;" />
<span style="color: red; font-weight: bold;">* zip 파일 업로드 필수 </span>
</td>
<tr>
데이터를 전송하면 Controller에서 받는다
등록Controller
// 게시판등록처리
@RequestMapping
public String board_write_proc(Model model, HttpServletRequest req) throws Exception {
String saveDir = req.getSession().getServletContext().getRealPath("/webzine/joonho");
String localPath = FileUtils.getUploadPath();
UploadInfo uploadInfo = FileUtils.upload("board", attSaboFileTps, "", req);
ParamInfo searchParam = ParamInfo.getSearchParam(uploadInfo, 20);
BoardInfo info = new BoardInfo(req, uploadInfo);
if(searchParam.getStr("mode").equals("add")) {
extractZipFiles(uploadInfo ,saveDir, localPath);
hpService.insertHpBoardSabo(info, uploadInfo.getAttachFiles());
throw new RedirectException("저장되었습니다.", searchParam.getStr("redirectUrl"));
throw new MsgException("잘못된 호출 입니다.");
}
extractZipFiles 압축 푸는 함수
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
private void extractZipFiles(UploadInfo uploadInfo , String saveDir , String localPath) throws IOException {
// 받는 파일이 갯수가 4개인데 이 중에 몇번 째 파일의 경로를 가져올 것인지
//get(2) -> 0 : 이미지 , 1 : pdf , 2 : zip , 3 : txt
String zipFilePath = uploadInfo.getAttachFiles().get(2).getAttSaveFilePath();
String outputFolder = saveDir;
String FullPath = localPath + zipFilePath;
byte[] buffer = new byte[1024];
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(FullPath))) {
ZipEntry zipEntry = zis.getNextEntry();
while (zipEntry != null) {
String fileName = zipEntry.getName();
File newFile = new File(outputFolder + File.separator + fileName);
if (zipEntry.isDirectory()) {
newFile.mkdirs();
} else {
new File(newFile.getParent()).mkdirs();
try (FileOutputStream fos = new FileOutputStream(newFile)) {
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
}
}
zis.closeEntry();
zipEntry = zis.getNextEntry();
}
}
}
우선 Controller 에서
String saveDir = req.getSession().getServletContext().getRealPath("/webzine/did");
String localPath = FileUtils.getUploadPath();
두개의 경로를 받는다
saveDir 의 경우 압축 풀린 파일이 저장될 경로를 가져온 값이다.
localPath 의 경우
util.xml 에 경로 설정 해놓은 값을 가져온 값이라고 보면 된다.
모든 웹페이지의 파일들이 저장 되는 로컬저장경로를 미리 세팅해서 불러온 값이다.
zipFilePath 값은 업로드 한 파일들이 업로드 되어야할 추가 경로 !
String FullPath = localPath + zipFilePath; 두개를 합쳐서 사용한다.
나머지 코드는 해당 경로의 파일을 압축을 풀고 경로를 생성하고 압축 푼 파일을 저장하는 코드 이다.
코드 변경 없이 사용해도 된다.
'Web Dev > Java Spring' 카테고리의 다른 글
dpkg: 종속성 문제로 jdk-17의 구성이 차단되었습니다: jdk-17 패키지는 다음 패키지에 의존: libc6-x32: 하지만: libc6-x32 패키지는 설치하지 않았습니다. (0) | 2024.01.09 |
---|---|
Java Spring 프레임워크 Controller에서 함수에 스케줄링 작업 하는 벙법 (10분에 한번씩 작동) (0) | 2023.10.31 |
Java 백엔드에서 JSON을 위한 Jackson 라이브러리 사용하는 방법에 대하여 (0) | 2023.10.12 |
<% out.println(readonly); %> 해당 코드는 서버단에서 데이터를 전송했을 경우에 readonly 값이 설정 되는 것인가 ? (0) | 2023.08.01 |
Java 17.0.5 버전을 다운로드하려면 다음 단계를 따르십시오. (0) | 2023.05.17 |
전자정부프레임 워크 Java BackEnd 파일 업로드 하는 방법 (0) | 2023.05.13 |