我正在为我的应用使用SmartGWT
LGPL version
。我想添加新功能将一些数据下载为文件。我发现好的解决方案是使用HttpServlet
。
所以我创建了一个将数据写入OutputStream
的程序。 Servlet工作正常。问题出在SmartGWT
方面。我正在发送RPCRequest
下载文件,但作为回应,我得到'标准'响应,而不是浏览器弹出窗口来保存文件。这是我的代码:
RPCRequest req = new RPCRequest();
req.setActionURL("/downloadData");
req.setHttpMethod("POST");
Map map = new HashMap();
map.put(// some data //);
req.setParams(map);
req.setDownloadResult(true);
RPCManager.sendRequest(req, new RPCCallback() {
@Override
public void execute(RPCResponse rpcResponse, Object o, RPCRequest rpcRequest) {
logger.log(Level.SEVERE, "response " + rpcResponse.getHttpResponseCode());
}
});
在回调中,我得到200个响应代码。设置RPCCallback
时,甚至不应调用文档setDownloadResult(true)
。当我没有任何反应时删除回调。我也尝试设置setDownloadToNewWindow(true)
,但它没有改变任何东西。
这是我的Servlet代码:
public class DownloadDataServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//get data from request, below just testing example
// .......
// .......
String content = "ABC";
String fileName = "file.dat";
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
response.setContentLength(content.length());
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
bos.write(content.getBytes(Charset.forName("UTF-8")));
bos.flush();
bos.close();
//IOUtils.write(content, response.getOutputStream(), "UTF-8"); // <-- also didn't change anything
}
}
我做错了什么?