복붙노트

[SPRING] 서버 응답에 파일 객체를 쓰고 서버에 파일을 저장하지 않고 어떻게 작성합니까?

SPRING

서버 응답에 파일 객체를 쓰고 서버에 파일을 저장하지 않고 어떻게 작성합니까?

DWR과 함께 Spring을 사용하고 있습니다. 응답으로 파일 객체를 반환하고 싶지만 서버 임시 위치에 파일을 저장하고 클라이언트 측 앵커 태그에 대한 위치를 href로 보냅니다. 그러나 클라이언트 측에 던져 넣을 수있는 방법이 있는지 궁금합니다. 서버에 일시적으로 저장하지 않고 응답 객체의 브라우저에 직접 파일로 저장하십시오.

나는 DWR을 통해 파일을 응답으로 보낼 수있는 방법이있을 것으로 기대했다.

해결법

  1. ==============================

    1.

    public ModelAndView writeFileContentInResponse(HttpServletRequest request, HttpServletResponse response) throws IOException {
    
            FileInputStream inputStream = new FileInputStream("FileInputStreamDemo.java");  //read the file
    
            response.setHeader("Content-Disposition","attachment; filename=test.txt");
            try {
                int c;
                while ((c = inputStream.read()) != -1) {
                response.getWriter().write(c);
                }
            } finally {
                if (inputStream != null) 
                    inputStream.close();
                    response.getWriter().close();
            }
    
            }
    
  2. ==============================

    2.Spring을 사용한 이래로 수년이 지났습니다. DWR에 익숙하지 않지만 질문의 본질은 웹의 기본입니다.

    Spring을 사용한 이래로 수년이 지났습니다. DWR에 익숙하지 않지만 질문의 본질은 웹의 기본입니다.

    대답은 '예'입니다. 실제로 HTTP 헤더 Content-Disposition : attachment를 설정 한 다음 내용을 스트리밍해야합니다. 이 모든 것은 원래 요청에 대한 응답 일 것입니다 (링크를 돌려 보내는 것과 반대).

    이를 달성하기위한 실제 코드는 상황에 따라 다르지만 시작해야합니다.

  3. ==============================

    3.당신은 Java Script에서 메소드를 호출합니다. Spring이이 흐름과 어떤 관련이 있는지 이해하지 못했지만, DWR을 사용하면 Java Script Stub를 생성하고 노출 된 Bean의 Java 메소드를 Java 스크립트 클라이언트 코드에서 직접 서버로 호출 할 수 있습니다.

    당신은 Java Script에서 메소드를 호출합니다. Spring이이 흐름과 어떤 관련이 있는지 이해하지 못했지만, DWR을 사용하면 Java Script Stub를 생성하고 노출 된 Bean의 Java 메소드를 Java 스크립트 클라이언트 코드에서 직접 서버로 호출 할 수 있습니다.

    바이트 배열을 반환하는 한 파일을 바이트 단위로 읽고 java 메서드에서 반환 할 수 있습니다. 그러나 클라이언트에서이 바이트 배열로 무엇을 할 것입니까?

    나는이 특정 흐름에서 DWR을 사용하지 말고 오히려 ordinar AJAX 요청 (DWR이 어떻게 든 편리함을 감쌀 수 있다면)을 발행한다고 생각한다. 이 요청은 DWRServlet에 오지 말고, Spring MVC와 같은 일반적인 서블릿 / 웹 기반 프레임 워크에 의해 처리되어야합니다. :) 요청이 서블릿에 도착하면

    response.setHeader ( "Content-Disposition", "attachment; filename = test.txt");

    이미 언급했듯이.

    희망이 도움이, 행운을 빕니다! 표

  4. ==============================

    4.클라이언트에서 Excel로 다운로드하는 예 :

    클라이언트에서 Excel로 다운로드하는 예 :

    // 자바 측 :

    public FileTransfer getExcel(Parametros param){
       byte[] result = <here get data>;
       InputStream myInputStream = new ByteArrayInputStream(result); 
       String excelFormat = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
       FileTransfer dwrExcelFile = new FileTransfer("excel.xlsx", excelFormat, myInputStream);
       return dwrExcelFile;
    }
    

    // 자바 스크립트 쪽 :

    function downloadExcelFile() {
      dwr.engine.setTimeout(59000);
      var params = <params_to_send>;
      <Java_class>.getExcel(params, {callback:function(dataFromServer) {
        downloadExcelCallback(dataFromServer);
      }});
    }
    
    function downloadExcelCallback(data) {
       dwr.engine.openInDownload(data);
    }
    
  5. from https://stackoverflow.com/questions/7412337/how-to-write-a-file-object-on-server-response-and-without-saving-file-on-server by cc-by-sa and MIT license