2012-08-10 1 views
1

내 다운로드 시나리오 : jsp에서 다운로드 링크를 클릭하면 애플릿에서 파일 ID로 서명 된 애플릿 메서드를 호출하고 해당 ID를 전달하여 서버 측 메서드를 호출합니다. 그 파일을 서버 측에서 가져올 수는 있지만 반환하거나 그 파일을 애플릿 함수로 전달하고 싶습니다. 제 질문은 다운로드 한 파일을 내 애플릿으로 되 돌리는 방법입니까? 또는 애플릿에서 유용 할 수있는 서버 측의 응답 객체에 파일을 설정하려면 어떻게해야합니까?서버 측 컨트롤러에서 서명 된 애플릿의 메서드를 다시 호출하거나 호출하는 방법은 무엇입니까?

내 서명 애플릿 :

private static void downloadEncryptedFile(String uuid) throws HttpException, IOException { 
    String uri = "http://localhost:8080/encryptFileDownload.works?uuid="+uuid; 
    HttpClient client = new HttpClient(); 
    PostMethod postMethod = new PostMethod(uri); 
    postMethod.setRequestHeader("Content-type", "text/xml; charset=ISO-8859-1"); 
    client.executeMethod(postMethod); 
    postMethod.releaseConnection(); 
} 

내 서버 측 기능 :

@RequestMapping(value = "/encryptFileDownload/{uuid}.works", method = RequestMethod.POST) 
public String downloadEncryptFile(@PathVariable("uuid") String uuid, HttpSession session, HttpServletResponse response) { 
    try { 
    if (StringUtils.isNotEmpty(uuid)) { 
     LOG.info("-----UUID----"); 
     Node node = contentRetrieveService.getByNodeId(uuid); 
     Node resource = node.getNode("jcr:content"); 
     response.setContentType("application/octet-stream"); 
     response.setHeader("Content-Disposition", "attachment; filename=\"" + node.getName() + "\""); 
     InputStream in = resource.getProperty("jcr:data").getBinary().getStream(); 
     ServletOutputStream outs = response.getOutputStream(); 
     int i = 0; 
     while ((i = in.read()) != -1) { 
     outs.write(i); 
     } 
     outs.flush(); 
     outs.close(); 
     in.close(); 
     LOG.info("File Downloaded"); 
    } 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
    return null; 
} 

답변

1

나는 해결책을 가지고;

내 애플릿 : 난 그냥 따라서 나는 나의 코드에서 변경 한, 파일 ID가 그것을 다운로드 및 애플릿에 다시 해당 파일을 반환 통과하고 싶었

try {  
      URL urlServlet = new URL("uri for your servlet"); 
      URLConnection con = urlServlet.openConnection(); 
      con.setDoInput(true); 
      con.setDoOutput(true); 
      con.setUseCaches(false); 
      con.setRequestProperty(
       "Content-Type", 
       "application/x-java-serialized-object"); 

      // send data to the servlet 
      OutputStream outstream = con.getOutputStream(); 
      ObjectOutputStream oos = new ObjectOutputStream(outstream); 
      oos.writeObject(uuid); 
      oos.flush(); 
      oos.close(); 

      // receive result from servlet 
      InputStream instr = con.getInputStream(); 
      ObjectInputStream inputFromServlet = new ObjectInputStream(instr); 
      String name = con.getHeaderField("filename"); 
      File fi = new File(name); 
      int i = 0; 
      while ((i = inputFromServlet.read()) != -1) { 
       System.out.println(inputFromServlet.readLine()); 
      } 
      inputFromServlet.close(); 
      instr.close(); 

     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 

서버 측 기능 만 이 교체 :

OutputStream outs = response.getOutputStream(); 
       outputToApplet = new ObjectOutputStream(outs); 
       int i = 0; 
       while ((i = in.read()) != -1) { 
        outputToApplet.write(i); 
       } 
여기
+0

내가 JCR 파일 업로드 및 다운로드를 사용했으며,이 코드는 서버에서 파일을 다운로드 할 특정 그러나 중요한 것은 establ입니다이기 때문에 당신이 당신의 요구 사항으로이 코드를 활용할 수 애플릿과 서버 및 그 반대로 통신 경로를 지정합니다. – Balasaheb