30.File Up/Download

30.1File Upload / Download

FileUpload 컴포넌트와 FileDownLoad 컴포넌트를 이용하여 파일 업로드,다운로드 방법을 설명합니다.

그림 30-1FileUpDownload_0

30.1.1File Upload/Download를 위한 준비작업

FileUplaod, FileDownload 컴포넌트를 이용하기 위해서는 TypeDefinition에 추가를 해 주어야 합니다.
TypeDefinition 창에서 Add 클릭 후 ID, ClassName을 직접 입력 해 주시면 됩니다.

그림 30-2FileUpDownload_5

그림 30-3FileUpDownload_6

30.1.2파일추가

Fileupload컴포넌트에서 '찾기' 버튼 클릭 하여 파일을 추가할 수 있습니다. 
여러 건을 올릴 경우, '파일추가' 버튼을 클릭하면 Fileupload컴포넌트가 추가가 되며 다수의 파일을 선택할 수 있습니다.
추가한 파일만큼 Grid의 리스트 목록에 나타납니다.

그림 30-4FileUpDownload_1

30.1.3파일 업로드

파일이 선택이 되면 ‘File upload버튼 클릭시 설정된 서버의 업로드 폴더로 업로드가 되며, 
정상적으로 업로드시 “Upload success” alert창이 뜹니다.

그림 30-5FileUpDownload_10

정상적으로 업로드가 된 후 서버파일 경로 위치에 정상적으로 파일이 업로드 되었는지 확인할 수 있습니다.

File Size는 서버로 File을 Upload하기 전에는 확인이 어려우므로 Upload 후 서비스(jsp) 단에서 데이타를 만들어 표시해야 합니다.

30.1.4파일 다운로드

파일 다운로드 시 다운로드 필요한 파일에 대해 체크박스 선택을 하여 로컬로 다운 가능합니다.
'File download' 클릭시 다운로드 파일 개수만큼 web페이지 하단에 아래와 같이 순차적으로 확인 창이 뜹니다.

그림 30-6FileUpDownload_11

30.1.5파일 삭제

Fileupload컴포넌트 이용하여 선택한 파일리스트에서 삭제 하고 싶은 row의 체크박스를 선택 후
 '파일 삭제' 버튼 클릭시 Grid리스트에서도 삭제가 되며 선택한 파일을 오픈한 Fileupload컴포넌트도 
삭제가 됩니다. 
예를 들어 두번째 Combo_Basic_1.png를 삭제 하기 위해서 체크박스 선택 후 'File delete' 클릭 시 Grid 리스트에서 삭제 및 Fileupload컴포넌트도 삭제됩니다.

그림 30-7FileUpDownload_12

30.1.6주요 소스 내용

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