파일 다운로드를 위한 SpringMVC

본고의 실례는 여러분에게 SpringMVC 파일 다운로드의 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같습니다.
두 사례
  1.로그인 사용자에게 다운로드 서비스를 제공합니다.
  2.웹 주소만 입력하면 다운로드를 받을 수 없습니다.
파일 다운로드 개요
파일을 브라우저에 전송하려면 컨트롤러에서 다음을 수행해야 합니다.
  • 요청 처리 방법에void 반환 형식을 사용하고 방법에 HttpServletResponse 파라미터를 추가합니다..
  • 응답하는 내용 유형을 파일의 내용 유형으로 설정합니다.Content-Type 제목은 어떤 실체의 body에서 데이터의 유형을 정의하고 미디어 형식과 하위 형식 식별자를 포함합니다.컨텐츠 유형을 잘 모르고 브라우저에서 저장 대화 상자를 계속 표시하지 않으려면 응용 프로그램/OCTET-STREAM으로 설정합니다.이 값은 대소문자를 구분하지 않습니다..
  • Content-Disposition이라는 HTTP 응답 제목을 추가하고attachment를 부여합니다.filename=fileName, 여기 fileName은 기본 파일 이름입니다..
  • 사례 1: 로그인 사용자를 위한 다운로드 서비스
    도메인 클래스
    
    package domain;
    public class Login {
     private String username;
     private String password;
    
     public String getUsername() {
      return username;
     }
    
     public void setUsername(String username) {
      this.username = username;
     }
    
     public String getPassword() {
      return password;
     }
    
     public void setPassword(String password) {
      this.password = password;
     }
    }
    
    Controller 컨트롤러
    
    package controller;
    
    import domain.Login;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.io.*;
    
    @Controller
    public class ResourceController {
     private static final Log logger = LogFactory.getLog(ResourceController.class);
    
     @RequestMapping(value = "/login")
     public String login(@ModelAttribute Login login, HttpSession session, Model model)
     {
      model.addAttribute("login",new Login());
      if("ms".equals(login.getUsername())&&"123".equals(login.getPassword()))
      {
       session.setAttribute("loggedIn",Boolean.TRUE);
       return "Main";
      }
      else
      {
       return "LoginForm";
      }
     }
    
     @RequestMapping(value = "/resource_download")
     public String downloadResource(HttpSession session, HttpServletRequest request, HttpServletResponse response)
     {
      if(session==null||session.getAttribute("loggedIn")==null)
      {
      return "LoginForm";
      }
      String dataDirectory = request.getServletContext().getRealPath("/WEB-INF/data");
      File file = new File(dataDirectory,"Blog.zip");
      if(file.exists())
      {
       response.setContentType("application/octet-stream");
       response.addHeader("Content-Disposition","attachment;filename=Blog.zip");
       byte[] buffer = new byte[1024];
       FileInputStream fis =null;
       BufferedInputStream bis =null;
       try {
        fis = new FileInputStream(file);
        bis = new BufferedInputStream(fis);
        OutputStream os =response.getOutputStream();
        int i =bis.read(buffer);
        while (i!=-1) {
         os.write(buffer, 0, i);
         i=bis.read(buffer);
        }
       } catch (FileNotFoundException e) {
        e.printStackTrace();
       } catch (IOException e) {
        e.printStackTrace();
       }finally {
        try {
         bis.close();
        } catch (IOException e) {
         e.printStackTrace();
        }
        try {
         fis.close();
        } catch (IOException e) {
         e.printStackTrace();
        }
       }
    
      }
      return null;
     }
    }
    
    
    
    뷰 작성
    Main.jsp
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
     <title>DownPage</title>
    </head>
    <body>
     <h4> </h4>
     <p>
      <a href="resource_download" rel="external nofollow" >Down</a>
     </p>
    </body>
    </html>
    LoginForm.jsp
    
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
     <title> </title>
    </head>
    <body>
     <form:form commandName="login" action="login" method="post">
       : <br>
      <form:input path="username" cssErrorClass="error" id="username"/>
      <br>  : <br>
      <form:input path="password" cssErrorClass="error" id="password"/>
      <br> <input type="submit" value=" ">
     </form:form>
    </body>
    </html>
    
    사례 2: 웹 주소 입력만으로 다운로드 불가
    
     @RequestMapping(value = "/resource_download")
     public String downloadResource(HttpSession session, HttpServletRequest request, HttpServletResponse response,@RequestHeader String refuer
     ){
      if(refer==null) // refer 
      {
        return "LoginForm";
      }
      String dataDirectory = request.getServletContext().getRealPath("/WEB-INF/data");
      File file = new File(dataDirectory,"Blog.zip");
      if(file.exists())
      {
       response.setContentType("application/octet-stream");
       response.addHeader("Content-Disposition","attachment;filename=Blog.zip");
       byte[] buffer = new byte[1024];
       FileInputStream fis =null;
       BufferedInputStream bis =null;
       try {
        fis = new FileInputStream(file);
        bis = new BufferedInputStream(fis);
        OutputStream os =response.getOutputStream();
        int i =bis.read(buffer);
        while (i!=-1) {
         os.write(buffer, 0, i);
         i=bis.read(buffer);
        }
       } catch (FileNotFoundException e) {
        e.printStackTrace();
       } catch (IOException e) {
        e.printStackTrace();
       }finally {
        try {
         bis.close();
        } catch (IOException e) {
         e.printStackTrace();
        }
        try {
         fis.close();
        } catch (IOException e) {
         e.printStackTrace();
        }
       }
    
      }
      return null;
     }
    }
    
    이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

    좋은 웹페이지 즐겨찾기