2012-08-24 157 views
2

我正在使用GWT。從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(); 

在這裏,我可以讀取文檔。

我想將此發送給客戶端。 我該如何製作這個文件並將其發送回客戶端?

回答

3

在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; 
+0

:從服務器到客戶端dowloded的所有文件都是空的,但文件不是空的。 – GameBuilder

+0

我編輯了答案。立即嘗試並檢查是否在您的代碼中使用'contentStream.getStream()'獲取數據。 –

+0

:什麼是輸入。 'new BufferedInputStream(input);' – GameBuilder

1

您可以創建在服務器端和機會標準的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) { 
     } 
    } 
} 
相關問題