File Upload / Download
FileUpload 컴포넌트와 FileDownLoad 컴포넌트를 이용하여 파일 업로드,다운로드 방법을 설명합니다.
File Upload/Download를 위한 준비작업
FileUplaod, FileDownload 컴포넌트를 이용하기 위해서는 TypeDefinition에 추가를 해 주어야 합니다. TypeDefinition 창에서 Add 클릭 후 ID, ClassName을 직접 입력 해 주시면 됩니다.
파일추가
Fileupload컴포넌트에서 '찾기' 버튼 클릭 하여 파일을 추가할 수 있습니다. 여러 건을 올릴 경우, '파일추가' 버튼을 클릭하면 Fileupload컴포넌트가 추가가 되며 다수의 파일을 선택할 수 있습니다. 추가한 파일만큼 Grid의 리스트 목록에 나타납니다.
파일 업로드
파일이 선택이 되면 ‘File upload버튼 클릭시 설정된 서버의 업로드 폴더로 업로드가 되며, 정상적으로 업로드시 “Upload success” alert창이 뜹니다.
정상적으로 업로드가 된 후 서버파일 경로 위치에 정상적으로 파일이 업로드 되었는지 확인할 수 있습니다.
File Size는 서버로 File을 Upload하기 전에는 확인이 어려우므로 Upload 후 서비스(jsp) 단에서 데이타를 만들어 표시해야 합니다.
파일 다운로드
파일 다운로드 시 다운로드 필요한 파일에 대해 체크박스 선택을 하여 로컬로 다운 가능합니다. 'File download' 클릭시 다운로드 파일 개수만큼 web페이지 하단에 아래와 같이 순차적으로 확인 창이 뜹니다.
파일 삭제
Fileupload컴포넌트 이용하여 선택한 파일리스트에서 삭제 하고 싶은 row의 체크박스를 선택 후 '파일 삭제' 버튼 클릭시 Grid리스트에서도 삭제가 되며 선택한 파일을 오픈한 Fileupload컴포넌트도 삭제가 됩니다. 예를 들어 두번째 Combo_Basic_1.png를 삭제 하기 위해서 체크박스 선택 후 'File delete' 클릭 시 Grid 리스트에서 삭제 및 Fileupload컴포넌트도 삭제됩니다.
주요 소스 내용
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