응용프로그램(exe) 업로드 추가

main
이범준 1 month ago
parent f87b12d1f3
commit d9274cc609

@ -1,5 +1,9 @@
package externalsystem.cleanparking.web;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
@ -18,6 +22,7 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import cokr.xit.DateUtil;
@ -91,6 +96,65 @@ public class CpController extends AbstractController {
return returnStr;
}
@RequestMapping(name="응용프로그램업로드화면", value="/uploadApplMain.do")
public ModelAndView uploadApplMain() {
ModelAndView mav = new ModelAndView();
mav.setViewName("cp/uploadAppl-main");
mav.addObject("pageName", "uploadApplMain");
return mav;
}
@RequestMapping(name="응용프로그램업로드", value="/uploadAppl.do")
public ModelAndView uploadAppl(HttpServletRequest hreq, MultipartFile mfile) {
ModelAndView mav = new ModelAndView("jsonView");
if(!mfile.getOriginalFilename().equals("CleanParking.exe")) {
return new ModelAndView("jsonView")
.addObject("saved", false);
}
String server = hreq.getParameter("server");
String callHost = "";
if(server.equals("1")) {
callHost = "http://localhost:18080/is/rentcar/intf/appl/uploadProgram.do";
} else if(server.equals("2")) {
callHost = "http://211.119.124.9:9075/is/rentcar/intf/appl/uploadProgram.do";
} else if(server.equals("3")) {
callHost = "https://jeju.go.kr/is/rentcar/intf/appl/uploadProgram.do";
}
String folderPath = "files/temp";
String tempSavePath = folderPath+"/CleanParking.exe";
File folder = new File(folderPath);
if(!folder.exists()) {
folder.mkdirs();
}
File file = new File(tempSavePath);
try {
Files.copy(mfile.getInputStream(), file.toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
e.printStackTrace();
}
MultipartTest mt = new MultipartTest();
try {
mt.multipartPost(tempSavePath, callHost);
} catch (IOException e) {
e.printStackTrace();
}
mav.addObject("saved",true);
return mav;
}
//단속자료생성메인
@RequestMapping(name="단속 자료 생성 화면", value="/createCrdnMain.do")
public ModelAndView createCrdnMain() {

@ -0,0 +1,114 @@
package externalsystem.cleanparking.web;
import java.io.IOException;
import java.math.BigInteger;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
public class MultipartTest {
HttpClient httpClient;
HttpRequest httpRequest;
HttpResponse<String> httpResponse;
protected final Map<Object, Object> map = new HashMap<>();
private static final String LINEFEED = "\r\n";
private static final String DOUBLE_HYPHEN = "--";
private static final String QUTATE = "\"";
public void multipartPost(String sendFilePath, String sendUri) throws IOException {
Path path = Path.of(sendFilePath);
BigInteger randomNumber = new BigInteger(256, new Random());
StringBuilder boundary = new StringBuilder().append(randomNumber);
map.put("mfile", path);
httpClient = HttpClient.newHttpClient();
multipartToByte(map, boundary.toString());
httpRequest = HttpRequest.newBuilder()
.uri(URI.create(sendUri))
.setHeader("Accept-Language", "ko")
.setHeader("Content-Type", "multipart/form-data; boundary=" + boundary)
.POST(multipartToByte(map, boundary.toString()))
.build();
try {
HttpResponse<String> response = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
private HttpRequest.BodyPublisher multipartToByte (Map<Object, Object> map, String boundary) throws IOException {
List<byte[]> byteArrays = new ArrayList<>();
StringBuilder stringBuilder = new StringBuilder();
for (Map.Entry<Object, Object> data : map.entrySet()) {
stringBuilder.setLength(0);
stringBuilder.append(DOUBLE_HYPHEN)
.append(boundary)
.append(LINEFEED);
if (data.getValue() instanceof Path) {
Path filePath = (Path)data.getValue();
String mimeType = Files.probeContentType(filePath);
byte[] fileByte = Files.readAllBytes(filePath);
stringBuilder.append("Content-Disposition: form-data; name=")
.append(QUTATE)
.append(data.getKey())
.append(QUTATE)
.append("; filename= ")
.append(QUTATE)
.append(data.getValue())
.append(QUTATE)
.append(LINEFEED)
.append("Content-Type: ")
.append(mimeType)
.append(LINEFEED)
.append(LINEFEED);
byteArrays.add(stringBuilder.toString().getBytes(StandardCharsets.UTF_8));
byteArrays.add(fileByte);
byteArrays.add(LINEFEED.getBytes(StandardCharsets.UTF_8));
} else {
stringBuilder.append("Content-Disposition: form-data; name=")
.append(QUTATE)
.append(data.getKey())
.append(QUTATE)
.append(";")
.append(LINEFEED)
.append(LINEFEED)
.append(data.getValue())
.append(LINEFEED);
byteArrays.add(stringBuilder.toString().getBytes(StandardCharsets.UTF_8));
}
}
stringBuilder.setLength(0);
stringBuilder.append(DOUBLE_HYPHEN)
.append(boundary)
.append(DOUBLE_HYPHEN);
byteArrays.add(stringBuilder.toString().getBytes(StandardCharsets.UTF_8));
return HttpRequest.BodyPublishers.ofByteArrays(byteArrays);
}
}

@ -0,0 +1,71 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
<form id="frmEdit--${pageName}" method="post" enctype="multipart/form-data">
<div class="d-flex flex-row justify-content-evenly">
<div class="card" style="width:800px;">
<h3>업로드</h3>
<div class="row">
<div class="col-md-12">
<label class="bg-lighter col-form-label w-px-150">파일</label>
<input type="file" name="mfile" class="w-px-300" />
</div>
</div>
<button type="button" id="btnUploadAppl1" class="btn btn-primary w-px-100">업로드(local)</button>
<button type="button" id="btnUploadAppl2" class="btn btn-primary w-px-100">업로드(dev)</button>
<button type="button" id="btnUploadAppl3" class="btn btn-primary w-px-100">업로드(prod)</button>
</div>
</div>
</form>
<script>
$("#btnUploadAppl1,#btnUploadAppl2,#btnUploadAppl3").on("click",function(){
if($("#frmEdit--${pageName}").find("[name='mfile']").val() == ""){
alert("첨부파일이 없습니다.");
return;
}
var formData = new FormData(document.getElementById("frmEdit--${pageName}"));
var callHost = "";
if(this.id == "btnUploadAppl1"){
formData.append("server","1");
} else if(this.id == "btnUploadAppl2"){
formData.append("server","2");
} else if(this.id == "btnUploadAppl3"){
formData.append("server","3");
} else {
return;
}
var options = {
url : wctx.url("cleanparking/uploadAppl.do"),
type : "POST",
contentType : false, processData : false,
data : formData,
error : (xhr, options, error) => {
console.log('에러');
},
complete : () => {
},
success : (resp, msg, xhr) => {
if(resp.saved){
alert("성공!");
} else {
alert("실패!");
}
}
};
$.ajax(options);
});
</script>

@ -32,6 +32,7 @@
</div>
<div class="container-xxl container-p-y ms-1">
<h5>클린파킹</h5>
<button type="button" id="btnUploadApplPop" class="btn btn-primary">응용프로그램업로드</button>
<button type="button" id="btnCreateCrdnPop" class="btn btn-primary">단속자료생성</button>
</div>
</div>
@ -216,6 +217,28 @@ $("#btnPopEstablishJuso").on("click", function(){
});
$("#btnUploadApplPop").on("click", function(){
$.ajax({
type : "GET",
ContentType : "text/html;charset=UTF-8",
url : "/cleanparking/uploadApplMain.do",
data: {},
success: (resp) => {
dialog.open({
id: "cpUploadApplDialog",
title: "응용프로그램업로드",
content: resp ,
size: "md",
init:() => {}
});
},
error : function(xhr, status, error) {
},
complete : function(xhr, status) {
}
});
});
$("#btnCreateCrdnPop").on("click", function(){
$.ajax({

Loading…
Cancel
Save