안녕하세요, 안드로이드 개발을 하면서 서버단을 Servlet으로 개발했습니다. 데이터 송수신에서 문제가 없었는데, 파일 업로드 부분에서 문제가 발생했네요.
최초로 파일 업로드한 기기가 '기기A'라고 한다면, 다른 기기에서 무엇을 올리든 텍스트 데이터며 파일이며 '기기A'에서 마지막으로 올라간 텍스트와 파일이 업로드 됩니다.
다른 기능은 전혀 문제가 없습니다. 혹시 왜 그런지 알 수 있을까요?
고수분들 부탁 드려요..!
import java.io.BufferedWriter;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Base64;
import java.util.Iterator;
import java.util.List;
import java.util.Date;
import java.text.SimpleDateFormat;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@WebServlet("/UpdateManualWithFile")
public class UpdateManualWithFile extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String UPLOAD_DIR = "files/";
private Connection connection;
private String session, title, content, type;
private int id;
private FileItem uploadFile;
private File newFile;
/**
* @see HttpServlet#HttpServlet()
*/
public UpdateManualWithFile() {
super();
}
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.service(request, response);
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/json");
PrintWriter out = response.getWriter();
try {
JSONObject obj = new JSONObject();
connection = DBBase.connectDB(out);
String applicationPath = request.getServletContext().getRealPath("");
String uploadFilePath = applicationPath + UPLOAD_DIR;
File uploadFolder = new File(uploadFilePath);
boolean isMultipartContent = ServletFileUpload.isMultipartContent(request);
if (!uploadFolder.exists()) {
uploadFolder.mkdirs();
}
if (connection == null) {
obj.put("response_status_code", -101);
} else if (!isMultipartContent) {
obj.put("response_status_code", -102);
} else {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> fields = upload.parseRequest(request);
obj.put("size", fields.size());
Iterator<FileItem> it = fields.iterator();
if (!it.hasNext()) {
obj.put("response_status_code", -102);
} else {
while (it.hasNext()) {
FileItem fileItem = it.next();
boolean isFormField = fileItem.isFormField();
if (isFormField) {
if (fileItem.getFieldName().equals("session")) {
session = new String(fileItem.getString().getBytes("8859_1"),"utf-8");
obj.put("session", session);
} else if (fileItem.getFieldName().equals("title")) {
title = new String(fileItem.getString().getBytes("8859_1"),"utf-8");
obj.put("title", title);
} else if (fileItem.getFieldName().equals("content")) {
content = new String(fileItem.getString().getBytes("8859_1"),"utf-8");
obj.put("content", content);
} else if (fileItem.getFieldName().equals("type")) {
type = new String(fileItem.getString().getBytes("8859_1"),"utf-8");
obj.put("type", type);
} else if (fileItem.getFieldName().equals("id")) {
id = Integer.valueOf(fileItem.getString()).intValue();
}
} else {
uploadFile = fileItem;
newFile = new File(request.getServletContext().getRealPath("") + UPLOAD_DIR + File.separator+fileItem.getName());
uploadFile.write(newFile);
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
obj.put("error", e.getLocalizedMessage());
}
String query = String.format("SELECT emp_id FROM TB_sdmcpsms_employee WHERE session='%s'", session);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(query);
if (resultSet.next()) {
int empId = resultSet.getInt("emp_id");
obj.put("is_session_existed", true);
BufferedWriter bufferedWriter = null;
FileWriter fileWriter = null;
try {
String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
applicationPath = request.getServletContext().getRealPath("");
uploadFilePath = applicationPath + "logs/";
uploadFolder = new File(uploadFilePath);
if (!uploadFolder.exists()) {
uploadFolder.mkdirs();
}
File file = new File(uploadFilePath + date + ".txt");
if (!file.exists()) {
file.createNewFile();
}
fileWriter = new FileWriter(file.getAbsoluteFile(), true);
bufferedWriter = new BufferedWriter(fileWriter);
bufferedWriter.write(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()) + " - " + " empId: " + empId + ", Modify manual. (params- title: " + title + ", content: " + content + ", type: " + type + ", filename: " + uploadFile.getName() + ")");
bufferedWriter.newLine();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedWriter != null)
bufferedWriter.close();
if (fileWriter != null)
fileWriter.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
query = "UPDATE TB_sdmcpsms_manual SET title=?, content=?, path=?, moduser=?, moddate=GETDATE() WHERE manual_id=?";
PreparedStatement preparedStatement = connection.prepareStatement(query);
preparedStatement.setNString(1, title);
preparedStatement.setNString(2, content);
preparedStatement.setNString(3, uploadFile.getName());
preparedStatement.setInt(4, empId);
preparedStatement.setInt(5, id);
preparedStatement.execute();
obj.put("response_status_code", 1);
} else {
obj.put("is_session_existed", false);
}
}
out.print(obj);
} catch (JSONException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}