来自Servlet的SmartGWT下载文件

时间:2018-06-12 07:57:32

标签: servlets gwt smartgwt

我正在为我的应用使用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
    }
}

我做错了什么?

0 个答案:

没有答案