File Upload / Download
FileUpload 컴포넌트와 FileDownLoad 컴포넌트를 이용하여 파일 업로드,다운로드 방법을 설명합니다.
FileUpDownload_0
File Upload/Download를 위한 준비작업
FileUplaod, FileDownload 컴포넌트를 이용하기 위해서는 TypeDefinition에 추가를 해 주어야 합니다. TypeDefinition 창에서 Add 클릭 후 ID, ClassName을 직접 입력 해 주시면 됩니다.
FileUpDownload_5
FileUpDownload_6
파일추가
Fileupload컴포넌트에서 '찾기' 버튼 클릭 하여 파일을 추가할 수 있습니다. 여러 건을 올릴 경우, '파일추가' 버튼을 클릭하면 Fileupload컴포넌트가 추가가 되며 다수의 파일을 선택할 수 있습니다. 추가한 파일만큼 Grid의 리스트 목록에 나타납니다.
FileUpDownload_1
파일 업로드
파일이 선택이 되면 ‘File upload버튼 클릭시 설정된 서버의 업로드 폴더로 업로드가 되며, 정상적으로 업로드시 “Upload success” alert창이 뜹니다.
FileUpDownload_10
정상적으로 업로드가 된 후 서버파일 경로 위치에 정상적으로 파일이 업로드 되었는지 확인할 수 있습니다.
File Size는 서버로 File을 Upload하기 전에는 확인이 어려우므로 Upload 후 서비스(jsp) 단에서 데이타를 만들어 표시해야 합니다.
파일 다운로드
파일 다운로드 시 다운로드 필요한 파일에 대해 체크박스 선택을 하여 로컬로 다운 가능합니다. 'File download' 클릭시 다운로드 파일 개수만큼 web페이지 하단에 아래와 같이 순차적으로 확인 창이 뜹니다.
FileUpDownload_11
파일 삭제
Fileupload컴포넌트 이용하여 선택한 파일리스트에서 삭제 하고 싶은 row의 체크박스를 선택 후 '파일 삭제' 버튼 클릭시 Grid리스트에서도 삭제가 되며 선택한 파일을 오픈한 Fileupload컴포넌트도 삭제가 됩니다. 예를 들어 두번째 Combo_Basic_1.png를 삭제 하기 위해서 체크박스 선택 후 'File delete' 클릭 시 Grid 리스트에서 삭제 및 Fileupload컴포넌트도 삭제됩니다.
FileUpDownload_12
주요 소스 내용
Up/Downlaod를 위한 JSP소스
fileupload.jsp
<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page language="java"%>
<%@ page import="java.io.File"%>
<%@ page import="java.io.IOException"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="java.util.Enumeration"%>
<%@ page import="java.util.Iterator"%>
<%@ page import="java.util.List"%>
<%@ page import="javax.servlet.ServletException"%>
<%@ page import="javax.servlet.http.HttpServletRequest"%>
<%@ page import="javax.servlet.http.HttpServletResponse"%>
<%@ page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@ page import="com.tobesoft.xplatform.data.ColumnHeader"%>
<%@ page import="com.tobesoft.xplatform.data.DataSet"%>
<%@ page import="com.tobesoft.xplatform.data.DataTypes"%>
<%@ page import="com.tobesoft.xplatform.data.PlatformData"%>
<%@ page import="com.tobesoft.xplatform.data.VariableList"%>
<%@ page import="com.tobesoft.xplatform.tx.HttpPlatformResponse"%>
<%@ page import="com.tobesoft.xplatform.tx.PlatformException"%>
<%
String chkType = request.getHeader("Content-Type");
//System.out.println(chkType);
if( chkType == null )
return;
request.setCharacterEncoding("utf-8");
String contextRealPath = request.getSession().getServletContext().getRealPath("/");
String PATH = request.getParameter("PATH");
String savePath = contextRealPath + PATH;
System.out.println(savePath);
System.out.println(savePath);
int maxSize = 500 * 1024 * 1024; // 최대 업로드 파일 크기 500MB(메가)로 제한
PlatformData resData = new PlatformData();
VariableList resVarList = resData.getVariableList();
String sMsg = " A ";
try {
MultipartRequest multi = new MultipartRequest(request, savePath, maxSize, "utf-8", new DefaultFileRenamePolicy());
Enumeration files = multi.getFileNames(); // 파일명 모두 얻기
sMsg += "B ";
DataSet ds = new DataSet("Dataset00");
ds.addColumn(new ColumnHeader("fileName", DataTypes.STRING));
ds.addColumn(new ColumnHeader("fileSize", DataTypes.STRING));
ds.addColumn(new ColumnHeader("fileType", DataTypes.STRING));
sMsg += "C ";
String fileName="";
while (files.hasMoreElements()) {
sMsg += "D ";
String name = (String)files.nextElement();
fileName += multi.getFilesystemName(name);
String type = multi.getContentType(name);
File f = multi.getFile(name);
System.out.println("fileName:"+fileName);
System.out.println("fileSize:"+f.length());
int row = ds.newRow();
ds.set(row, "fileName", fileName);
ds.set(row, "fileType", type);
if (f != null)
{
String size = Long.toString(f.length()/1024)+"KB";
ds.set(row, "fileSize", size);
}
sMsg += row +" ";
}
resData.addDataSet(ds);
resVarList.add("ErrorCode", 200);
//resVarList.add("ErrorMsg", savePath+"/"+fileName);
resVarList.add("ErrorMsg", fileName);
} catch (Exception e) {
resVarList.add("ErrorCode", -1);
resVarList.add("ErrorMsg", sMsg + " " + e);
}
HttpPlatformResponse res = new HttpPlatformResponse(response);
res.setData(resData);
res.sendData();
%>fileDownload.jsp
<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page language="java"%>
<%@ page import="java.io.BufferedInputStream"%>
<%@ page import="java.io.FileInputStream"%>
<%@ page import="java.io.File"%>
<%@ page import="java.io.IOException"%>
<%@ page import="javax.servlet.ServletException"%>
<%@ page import="javax.servlet.ServletOutputStream"%>
<%@ page import="javax.servlet.http.HttpServletRequest"%>
<%@ page import="javax.servlet.http.HttpServletResponse"%>
<%@ page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%
String contextRealPath = request.getSession().getServletContext().getRealPath("/");
String savePath = contextRealPath + "file";
String name = request.getParameter("file");
String filename = new String(name.getBytes("iso8859-1"), "UTF-8");
byte[] buffer = new byte[1024];
ServletOutputStream out_stream = null;
BufferedInputStream in_stream = null;
File fis = new File(savePath + "/" + filename);
if(fis.exists()){
try{
response.setContentType("utf-8");
response.setContentType("application/octet;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + filename);
out.clear();
out = pageContext.pushBody();
out_stream = response.getOutputStream();
in_stream = new BufferedInputStream(new FileInputStream(fis));
int n = 0;
while ((n = in_stream.read(buffer, 0, 1024)) != -1) {
out_stream.write(buffer, 0, n);
}// while
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in_stream != null) {
try {
in_stream.close();
} catch (Exception e) {}
}
if (out_stream != null) {
try {
out_stream.close();
} catch (Exception e) {}
}
}
}else{
response.sendRedirect("unknownfile");
}
%>- 소스 위치
Sample\FileUpDownload\np_FileUpDownload.xfdl