본문 바로가기

JAVA

JAVA 파일 업로드 다운로드

1) 주요 기능
1) 게시물 등록시, 첨파일을 등록하고,
2) 상세화면에대 해당 게시물의 첨부파일을 확인 및 다운로드 처리

 

 

2) 파일 업로드 뷰에 대한 이해
1. 스프링에서 사용하는 view는 기본적으로 jsp/html 뷰가 default
2. json view(객체 ==> json문자열)
3. 업로드 뷰 (클라이언트 ==> 서버) 파일 정보를 전송하는 뷰.

 

3) 파일 다운로드 뷰에 대한 이해
1. 서버에 특정한 위치에 있는 파일을 클릭등 이벤트를 처리했을 때, 클라이언트로
파일을 다운로드하게 처리하는 뷰(서버 ==> 클라이언트)

 

resource

# 파일서버정보
upload=C:/a01_javaexp/workspace/springweb/src/main/webapp/z01_upload/

# 업로드할 파일 경로
file.upload=C:/a01_javaexp/workspace/springweb/src/main/webapp/z01_upload/

 

dispatcher-servlet.xml

5. 파일업로드 뷰
<bean id="multipartResolver" 
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

6. 파일다운로드 뷰
<bean id="fileView01" class="springweb.z02_util.DownloadViewer"/> 

 

 

Mapper

<mapper namespace="springweb.a02_mvc.a03_dao.DaoExp">
<insert id="insertFile" parameterType="boardfile">
insert into  boardfile values(board_seq.nextval,
#{path}, #{fname}, sysdate, sysdate, '')
</insert>   
</mapper>

 

 

DAO

import org.springframework.stereotype.Repository;
import springweb.z01_vo.BoardFile;
@Repository
public interface DaoExp {
public void insertFile(BoardFile file);
}

 

 

Service

@Service
public class FileUploadService {
@Autowired(required = false)
private DaoExp dao;
@Value("${upload}")
private String path;
public void upload(FileVo vo){
  MultipartFile mpf = vo.getAddFile();
  String fname = mpf.getOriginalFilename();
  File f01 = new File(path+fname);
 
  try {
mpf.transferTo(f01);
System.out.println("파일 업로드 성공");
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
  // DB로 파일 정보 등록
  dao.insertFile(new BoardFile(path,fname));
 }
}

 

VO

public class BoardFile {
private int no;
private String path;
private String fname;
private Date regdte;
private Date uptdte;
private String etc;
public BoardFile() {
super();
// TODO Auto-generated constructor stub
}
public BoardFile(String path, String fname) {
super();
this.path = path;
this.fname = fname;
}

public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public Date getRegdte() {
return regdte;
}
public void setRegdte(Date regdte) {
this.regdte = regdte;
}
public Date getUptdte() {
return uptdte;
}
public void setUptdte(Date uptdte) {
this.uptdte = uptdte;
}
public String getEtc() {
return etc;
}
public void setEtc(String etc) {
this.etc = etc;
}}

 

FileVO

public class FileVo {
private MultipartFile addFile;
private String title;
public MultipartFile getAddFile() {
return addFile;
}
public void setAddFile(MultipartFile addFile) {
this.addFile = addFile;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}}

 

Controller   -upload

 @GetMapping("uploadForm02.do")
  public String uploadForm02_2() {
    return "WEB-INF\\views\\a02_mvc\\a11_fileUpload.jsp";
  }
  @PostMapping("uploadForm02.do")
  public String uploadForm02_1(@RequestParam("fileData") MultipartFile fileData) {
    System.out.println("업로드할 파일명:" + fileData.getOriginalFilename());
    String fname = fileData.getOriginalFilename();
    // 경로를 지정하여 파일 객체 생성
    String path = "C:\\a01_javaexp\\workspace\\springweb\\src\\main\\webapp\\z01_upload\\";
    File f = new File(path + fname);
    // MultipartFile ==> File 변환..
    try {
      fileData.transferTo(f);
      System.out.println("파일 업로드 완료");
    } catch (IllegalStateException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    return "WEB-INF\\views\\a02_mvc\\a11_fileUpload.jsp";
  }

 

--download

//  viewer fileView01
@RequestMapping("download10.do")
public String download10(@RequestParam("filename") String filename, Model d) {
d.addAttribute("downloadFileName", filename);
return "fileView01";
}
// jsp에서 click(function(){ location.href="${path}/download10.do?filename="+$("[name=fname]").val()})

// http://localhost:7080/springweb/download11.do?file01=fullcalendar-5.11.0.zip
@RequestMapping("download11.do")
public String download11(@RequestParam("file01") String fname, Model d) {
d.addAttribute("downloadFileName", fname);
return "fileView01";
}

 

download util

public class DownloadViewer extends AbstractView{
// 다운로드할 경로명
@Value("${upload}")
private String path;

@Override
protected void renderMergedOutputModel(Map<String, Object> model, 
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 1. 요청으로 model로 매핑된 파일 객체 생성.  downloadFileName
String fname = (String)model.get("downloadFileName");
// 2. 파일 객체 생성.
File file = new File(path+fname);

// 3. response에 의해 파일객체를 client에 전송
//  1)파일 전송을 위한 contentType설정.
response.setContentType("applicatiion/download;charset=utf-8");
//  2) 파일의 길이
response.setContentLength((int)file.length());
//  3) 파일명이 한글인경우 한글 encoding, 공백의 경우 " "로 변경..
fname = URLEncoder.encode(fname,"utf-8").replaceAll("\\+", " ");
//  4) response의  header정보를 통해서 전송..
//      Content-Disposition : attachment;filename="파일명"
//      Content-Transfer-Encoding : "binary"
response.setHeader("Content-Disposition", "attachment;filename=\""+fname+"\"");
response.setHeader("Content-Transfer-Encoding", "binary");
// 4. 파일을 Stream으로 client에 전송
//  1) FileInputStream  fis: 파일
FileInputStream fis = new FileInputStream(file);
//   2) OutputStream  out 객체
OutputStream out = response.getOutputStream();
//   3) FileCopyUtils.copy(fis,out)
FileCopyUtils.copy(fis, out);
//   4) flush 처리
out.flush();
}}

 

jsp

<body>
<div class="jumbotron text-center">
  <h2>파일연습2</h2>
</div>
<div class="container">
<form enctype="multipart/form-data" id="frm01" class="form"  method="post">
   <nav class="navbar navbar-expand-sm bg-dark navbar-dark">
    <input type="file" name="fileData" class="form-control mr-sm-2" placeholder="내용" />
    <button class="btn btn-info" type="submit">Search</button>
  </nav>
</form>
   <table class="table table-hover table-striped">
    <col width="10%">
    <col width="50%">
    <col width="15%">
    <col width="15%">
    <col width="10%">
    <thead>
      <tr class="table-success text-center">
        <th>번호</th>
        <th>제목</th>
        <th>작성자</th>
        <th>작성일</th>
        <th>조회</th>
      </tr>
    </thead>
    <tbody>
     <tr><td></td><td></td><td></td><td></td><td></td></tr>
     <tr><td></td><td></td><td></td><td></td><td></td></tr>
     <tr><td></td><td></td><td></td><td></td><td></td></tr>
    </tbody>
</table>    
</div>
<div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLongTitle">타이틀</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
<form id="frm02" class="form"  method="post">
     <div class="row">
      <div class="col">
        <input type="text" class="form-control" placeholder="사원명 입력" name="ename">
      </div>
      <div class="col">
        <input type="text" class="form-control" placeholder="직책명 입력" name="job">
      </div>
     </div>
    </form> 
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>
</body>

간단한 테이블 jsp에 파일 업로드를 붙였습니다.

 

 

'JAVA' 카테고리의 다른 글

JAVA fullcalendar 달력 캘린더 처리  (1) 2022.10.04
JAVA 다국어처리  (0) 2022.10.04
JAVA 웹소켓 통신  (0) 2022.10.04
JAVA 메일전송  (0) 2022.10.04
JAVA 개발환경 설정  (1) 2022.08.25