From 2528ca67b6c89fdde511b9a76d47e9790e5255b8 Mon Sep 17 00:00:00 2001 From: Norbert Renner Date: Fri, 8 Aug 2014 16:00:40 +0200 Subject: [PATCH] improve downloading GPX+KML: - "Content-Disposition: attachment" header with "filename" - specific mime-types resolves nrenner/brouter-web#6 --- .../main/java/btools/server/RouteServer.java | 11 +++++++++- .../btools/server/request/RequestHandler.java | 2 ++ .../btools/server/request/ServerHandler.java | 22 +++++++++++++++++-- 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/brouter-server/src/main/java/btools/server/RouteServer.java b/brouter-server/src/main/java/btools/server/RouteServer.java index 9eab812..5d84e58 100644 --- a/brouter-server/src/main/java/btools/server/RouteServer.java +++ b/brouter-server/src/main/java/btools/server/RouteServer.java @@ -105,7 +105,7 @@ public class RouteServer extends Thread else { OsmTrack track = cr.getFoundTrack(); - writeHttpHeader(bw, handler.getMimeType()); + writeHttpHeader(bw, handler.getMimeType(), handler.getFileName()); if ( track != null ) { bw.write( handler.formatTrack(track) ); @@ -211,11 +211,20 @@ public class RouteServer extends Thread } private static void writeHttpHeader( BufferedWriter bw, String mimeType ) throws IOException + { + writeHttpHeader( bw, mimeType, null ); + } + + private static void writeHttpHeader( BufferedWriter bw, String mimeType, String fileName ) throws IOException { // http-header bw.write( "HTTP/1.1 200 OK\n" ); bw.write( "Connection: close\n" ); bw.write( "Content-Type: " + mimeType + "; charset=utf-8\n" ); + if ( fileName != null ) + { + bw.write( "Content-Disposition: attachment; filename=" + fileName + "\n" ); + } bw.write( "Access-Control-Allow-Origin: *\n" ); bw.write( "\n" ); } diff --git a/brouter-server/src/main/java/btools/server/request/RequestHandler.java b/brouter-server/src/main/java/btools/server/request/RequestHandler.java index f8b55fa..bfcf6c3 100644 --- a/brouter-server/src/main/java/btools/server/request/RequestHandler.java +++ b/brouter-server/src/main/java/btools/server/request/RequestHandler.java @@ -26,4 +26,6 @@ public abstract class RequestHandler public abstract String formatTrack(OsmTrack track); public abstract String getMimeType(); + + public abstract String getFileName(); } \ No newline at end of file diff --git a/brouter-server/src/main/java/btools/server/request/ServerHandler.java b/brouter-server/src/main/java/btools/server/request/ServerHandler.java index 8f96893..2e91b62 100644 --- a/brouter-server/src/main/java/btools/server/request/ServerHandler.java +++ b/brouter-server/src/main/java/btools/server/request/ServerHandler.java @@ -133,9 +133,13 @@ public class ServerHandler extends RequestHandler { String format = params.get( "format" ); if ( format != null ) { - if ( "gpx".equals( format ) || "kml".equals( format ) ) + if ( "gpx".equals( format ) ) { - result = "text/xml"; + result = "application/gpx+xml"; + } + else if ( "kml".equals( format ) ) + { + result = "application/vnd.google-earth.kml+xml"; } else if ( "csv".equals( format ) ) { @@ -146,6 +150,20 @@ public class ServerHandler extends RequestHandler { return result; } + @Override + public String getFileName() + { + String fileName = null; + String format = params.get( "format" ); + + if ( format != null ) + { + fileName = "brouter." + format; + } + + return fileName; + } + private static OsmNodeNamed readPosition( String vlon, String vlat, String name ) { if ( vlon == null ) throw new IllegalArgumentException( "lon " + name + " not found in input" );