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