본문으로 바로가기

Spring 파일 다운로드

category Language/Java 2016. 10. 18. 00:10
반응형

다운로드 뷰 선언


161017.epf

다운로드 뷰 작성

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.servlet.view.AbstractView;

public class downloadView extends AbstractView{

public downloadView() {
  setContentType("application/octet-stream");
}

@Override
protected void renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception{
  File file = (File) model.get("downloadFile");

  response.setContentType(getContentType());
  response.setContentLength((int) file.length());
  response.setHeader("Content-Disposition", "attachment; filename=\"" + java.net.URLEncoder.encode(file.getName(), "utf-8") + "\";");
  response.setHeader("Content-Transfer-Encoding", "binary");

  OutputStream out = response.getOutputStream();
  FileInputStream fis = null;
  try {
    fis = new FileInputStream(file);
    FileCopyUtils.copy(fis, out);
  }catch(Exception e){
    e.printStackTrace();
  } finally {
    if(fis != null){
      try{
        fis.close();
      }catch(IOException e){
        e.printStackTrace();
      }
    }
  }
  out.flush();
}


컨트롤러

@RequestMapping(value = "/download.do")
public ModelAndView download(ModelMap model, @RequestParam("fileName") String fileName, HttpServletRequest req,
            HttpServletResponse resp) throws IOException{
String filePath = "C:\\upload\\"; File file = new File(filePath + fileName); model.addAttribute("fileName", fileName); model.addAttribute("filePath", filePath); return new ModelAndView("fileDownloadView", "downloadFile", file); }

JavaScript

$("#download").on("click", function(){
	$("#fileName").val("파일.xlsx")
	$("#moveform").attr("action", "download.do").submit();
	return false;
});


반응형