我有一個用戶輸入數據(開始日期,結束日期等)的GWT頁面,然後通過RPC調用將此數據發送到服務器。在服務器上,我想用POI生成Excel報告,並讓用戶將該文件保存在本地機器上。使用GWT下載動態文件
這是我的測試代碼流文件返回給客戶端,但由於某種原因,我認爲它不知道如何當我使用RPC流文件到客戶端:
public class ReportsServiceImpl extends RemoteServiceServlet implements ReportsService {
public String myMethod(String s) {
File f = new File("/excelTestFile.xls");
String filename = f.getName();
int length = 0;
try {
HttpServletResponse resp = getThreadLocalResponse();
ServletOutputStream op = resp.getOutputStream();
ServletContext context = getServletConfig().getServletContext();
resp.setContentType("application/octet-stream");
resp.setContentLength((int) f.length());
resp.setHeader("Content-Disposition", "attachment; filename*=\"utf-8''" + filename + "");
byte[] bbuf = new byte[1024];
DataInputStream in = new DataInputStream(new FileInputStream(f));
while ((in != null) && ((length = in.read(bbuf)) != -1)) {
op.write(bbuf, 0, length);
}
in.close();
op.flush();
op.close();
}
catch (Exception ex) {
ex.printStackTrace();
}
return "Server says: " + filename;
}
}
我已經閱讀互聯網上的某個地方,你不能用RPC做文件流,我必須爲此使用Servlet。是否有任何示例如何使用Servlet以及如何從ReportsServiceImpl調用該servlet。我真的需要製作一個servlet,還是有可能使用我的RPC進行流式處理?
請更詳細地闡述這個問題。 「它不知道」不是真正的描述。究竟發生了什麼?究竟發生了什麼? – BalusC 2010-05-12 20:52:48
@sri的答案很有意義。現在輪到我發表一些評論:1)'DataInputStream'超級。只需使用直接的'FileInputStream'。畢竟你*只需要''InputStream'類中定義的'read()'方法。 2)'in!= null'檢查也是superflous,因爲這是**永不**空(你使用'new'創建了一個新的,永遠不能爲空)。 3)'Content-Disposition'頭文件在'filename'部分看起來不正確。要想了解如何執行* basic *文件服務,您可能會發現[本文](http://balusc.blogspot.com/2007/07/fileservlet.html)有用。祝你好運。 – BalusC 2010-05-12 22:33:01