代码之家  ›  专栏  ›  技术社区  ›  GameBuilder

用GWT将文件从服务器发送到客户端

  •  2
  • GameBuilder  · 技术社区  · 12 年前

    我使用的是GWT。

    我必须从下载一个文件 服务器 客户

    文档在外部存储库中。

    客户端通过Servlet发送文档的id。

    在…上 服务器端 :使用此ID检索文档:

    Document document = (Document)session.getObject(docId);
    ContentStream contentStream = document.getContentStream();
    
    ByteArrayInputStream inputStream = (ByteArrayInputStream) contentStream.getStream();
    
    int c;
    while ((c = inputStream.read()) != -1) {
        System.out.print((char) c); 
    }
    String mime = contentStream.getMimeType();
    String name = contentStream.getFileName();
    InputStream strm = contentStream.getStream();
    

    在这里我可以阅读文件。

    我想把这个发给客户。 如何将此文件制作为文件并将其发送回客户端?

    2 回复  |  直到 12 年前
        1
  •  3
  •   Hardik Mishra    12 年前

    在您的Servlet中:

    Document document =(Document)session.getObject(docId);
    ContentStream contentStream = document.getContentStream();
    String name = contentStream.getFileName();
    response.setHeader("Content-Type", "application/octet-stream;");
    response.setHeader("Content-Disposition", "attachment;filename=\"" + name + "\"");
    OutputStream os = response.getOutputStream();
    InputStream is = 
      (ByteArrayInputStream) contentStream.getStream();
    BufferedInputStream buf = new BufferedInputStream(is);
    int readBytes=0;
    while((readBytes=buf.read())!=-1) {
          os.write(readBytes);
    }   
    os.flush();
    os.close();// *important*
    return; 
    
        2
  •  1
  •   kapandron    12 年前

    您可以创建一个标准servlet( HttpServlet 而不是 RemoteServiceServlet )在服务器端,并有机会在客户端将id作为servlet参数提交。

    现在,您需要在收到请求后创建excel文件并将其发送到客户端。浏览器显示自动弹出的下载对话框。 但是,您应该确保设置了正确的内容类型响应标头。此标头将指示浏览器它是哪种类型的文件。

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
                                                  throws ServletException, IOException { 
    
    String fileId = reguest.getParameter("fileId"); // value of file id from request
    File file = CreatorExel.getFile(fileId); // your method to create file from helper class
    
    // setting response headers
    response.setHeader("Content-Type", getServletContext().getMimeType(file.getName())); 
    response.setHeader("Content-Length", file.length()); 
    response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\""); 
    
    BufferedInputStream input = null; 
    BufferedOutputStream output = null; 
    
    try { 
        InputStream inputStream = new FileInputStream(file);
        ServletOutputStream outputStream = response.getOutputStream();
    
        input = new BufferedInputStream(fileInput); 
        output = new BufferedOutputStream(outputStream); 
    
        int count;
        byte[] buffer = new byte[8192]; //  buffer size is 512*16
        while ((count = input.read(buffer)) > 0) {
             output.write(buffer, 0, count);
        }
    
    } finally { 
        if (output != null) {
           try { 
              output.close(); 
           } catch (IOException ex) {
           } 
        }
        if (input != null) {
           try { 
              input.close(); 
           } catch (IOException ex) {
           } 
        } 
    }