Servlet 를 이용한 파일 업로드를 간단하게 완성 시켰습니다.
사진과 글이 <Form> 태그를 통해 온 것을 파싱 할 수 있는 MultipartRequest 를 사용했습니다.
1. cos.jar 를 다운 받아 주세요.
http://www.servlets.com/cos/ 접속해서 받거나 아래 아이콘을 클릭해서 받으면 된다.
2. 파일업로드 서블릿을 생성하고 web.xml파일에 Servlet를 추가해주세요.
public class UploadServlet extends HttpServlet{
public UploadServlet() {
super();
}
public void init() throws ServletException {}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
FileManager fileManager = new FileManager(req);
}
3. FileManager class 를 만들어서 File을 관리할 수 있도록 했습니다.
MultipartRequest Class를 이용하면 File 복사가 되고, 파일명을 바꾸고 싶으면 마지막 파라미터를 주의 깊게 보시면 됩니다.
public class FileManager {
private MultipartRequest mRequest;
private int postMaxSize = 10 * 1024 * 1024; //10MB
private String encoding = "UTF-8";
public FileManager(final HttpServletRequest req) throws IOException {
mRequest = new MultipartRequest(req, 이미지저장 Path, postMaxSize, encoding, new FileAlteration());
}
}
4. 마지막 파라미터에 FileAlteration 이라는 class를 inner class 로 생성 했습니다.
class FileAlteration implements FileRenamePolicy {
@Override
public File rename(File file) {
String parentDir = file.getParent();
String fileName = file.getName();
//Get the extension if the file has one
String fileExt = "";
int i = -1;
if(( i = fileName.indexOf(".")) != -1){
fileExt = fileName.substring(i);
fileName = fileName.substring(0,i);
}
//Add the timestamp and user ID
String userId = (String) req.getSession().getAttribute("id");
newFileName = /*fileName + "_"+ */userId +("_"+( new Date( ).getTime( ) / 1000)) + fileExt;
//piece together the filename
newFileFullName = parentDir +
System.getProperty("file.separator") + newFileName;
file = new File(newFileFullName);
mimeType = new MimetypesFileTypeMap().getContentType(file);
return file;
}
}
위 소스를 보시면 쉽게 이해하실 수 있을거 같습니다.
파일작성자의 아이디와 TimeStamp 값을 이용해서 새롭게 생성될 파일의 이름을 만들어 주면 됩니다.
아래와 같이 파일이 저장됩니다.
단순한 업로드가 완성 되었습니다.
지금 하고 있는 모바일웹프로젝트에 글과+사진이 함께 전송하도록 하기 위해 한 것입니다.
파일업로드 뿐만 아니라
게시판테이블에 글 정보 삽입, 방금 삽입된 레코드의 INDEX 를 가져오는 루틴,
파일정보를 담은 테이블에 정보 삽입, 게시판 테이블 UPDATE 까지 고려해야 합니다.
'좋은 설계자 & 좋은관리자 & 좋은개발자 > Design Pattern & Modeling' 카테고리의 다른 글
Arraylist vector 공통점/ 차이점 (0) | 2014.01.02 |
---|---|
Java System.getProperty() (0) | 2013.12.23 |
Java 4대 중첩 클래스 (instance class, static class, local class, anonymous class) (0) | 2013.12.19 |
동기, 비동기(방식), blocking, non-blocking(함수) (0) | 2013.12.19 |
동기식 비동기식 차이 (0) | 2013.12.19 |