@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String uri = getDecodedUri(request); try { Pattern p = Pattern.compile(".*/NodePersistentStorage.bin/([^/]+)/([^/]+)"); Matcher m = p.matcher(uri); boolean b = m.matches(); if (!b) { setResponseStatus(response, HttpServletResponse.SC_BAD_REQUEST); response.getWriter().write("Improperly formatted URI"); return; } String categoryName = m.group(1); String keyName = m.group(2); NodePersistentStorage nps = H2O.getNPS(); AtomicLong length = new AtomicLong(); InputStream is = nps.get(categoryName, keyName, length); if (length.get() > (long) Integer.MAX_VALUE) { throw new Exception("NPS value size exceeds Integer.MAX_VALUE"); } response.setContentType("application/octet-stream"); response.setContentLength((int) length.get()); response.addHeader("Content-Disposition", "attachment; filename=" + keyName + ".flow"); setResponseStatus(response, HttpServletResponse.SC_OK); OutputStream os = response.getOutputStream(); water.util.FileUtils.copyStream(is, os, 2048); } catch (Exception e) { sendErrorResponse(response, e, uri); } finally { logRequest("GET", request, response); } }
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { String uri = getDecodedUri(request); try { boolean use_hex = false; String f_name = request.getParameter("frame_id"); String hex_string = request.getParameter("hex_string"); if (f_name == null) { throw new RuntimeException("Cannot find value for parameter \'frame_id\'"); } if (hex_string != null && hex_string.toLowerCase().equals("true")) { use_hex = true; } Frame dataset = DKV.getGet(f_name); // TODO: Find a way to determing the hex_string parameter. It should not always be false InputStream is = dataset.toCSV(true, use_hex); response.setContentType("application/octet-stream"); // Clean up the file name int x = f_name.length() - 1; boolean dot = false; for (; x >= 0; x--) if (!Character.isLetterOrDigit(f_name.charAt(x)) && f_name.charAt(x) != '_') if (f_name.charAt(x) == '.' && !dot) dot = true; else break; String suggested_fname = f_name.substring(x + 1).replace(".hex", ".csv"); if (!suggested_fname.endsWith(".csv")) suggested_fname = suggested_fname + ".csv"; f_name = suggested_fname; response.addHeader("Content-Disposition", "attachment; filename=" + f_name); setResponseStatus(response, HttpServletResponse.SC_OK); OutputStream os = response.getOutputStream(); water.util.FileUtils.copyStream(is, os, 2048); } catch (Exception e) { sendErrorResponse(response, e, uri); } finally { logRequest("GET", request, response); } }