title: Download a file through an HTTP Get in java
body: <p>I've written a download Servlet to return a file based on a messageID parameter. Below is the doGet method.</p>
  
  <pre><code>    @Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
  
      // This messageID would be used to get the correct file eventually
      long messageID = Long.parseLong(request.getParameter("messageID"));
      String fileName = "C:\\Users\\Soto\\Desktop\\new_audio1.amr";
      File returnFile = new File(fileName);
  
  
      ServletOutputStream out = response.getOutputStream();
      ServletContext context = getServletConfig().getServletContext();
      String mimetype = context.getMimeType("C:\\Users\\Soto\\Desktop\\new_audio1.amr");
  
      response.setContentType((mimetype != null) ? mimetype : "application/octet-stream");
      response.setContentLength((int)returnFile.length());
      response.setHeader("Content-Disposition", "attachment; filename=\"" + "new_audio.amr" + "\"");
  
      FileInputStream in = new FileInputStream(returnFile);
      byte[] buffer = new byte[4096];
  
      int length;
      while((length = in.read(buffer)) &gt; 0) {
          out.write(buffer, 0, length);
      }
      in.close();
      out.flush();
  }
  </code></pre>
  
  <p>I then wrote some code to retrieve the file.</p>
  
  <pre><code>String url = "http://localhost:8080/AudioFileUpload/DownloadServlet";
      String charset = "UTF-8";
  
      // The id of the audio message requested
      String messageID = "1";
  
      //URLConnection connection = null;
  
  
      try {   
          String query = String.format("messageID=%s", URLEncoder.encode(messageID, charset));
          //URLConnection connection;
          //URL u = new URL(url + "?" + query);
  
          //connection = u.openConnection();
          //InputStream in = connection.getInputStream();
  
          HttpClient httpClient = new DefaultHttpClient();
          httpClient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
  
  
          HttpGet httpGet = new HttpGet(url + "?" + query);
          HttpResponse response = httpClient.execute(httpGet);
  
          System.out.println(response.getStatusLine());
  
          InputStream in = response.getEntity().getContent();
  
          FileOutputStream fos = new FileOutputStream(new File("C:\\Users\\Soto\\Desktop\\new_audio2.amr"));
  
          byte[] buffer = new byte[4096];
          int length; 
          while((length = in.read(buffer)) &gt; 0) {
              fos.write(buffer, 0, length);
          }
          //connection = new URL(url + "?" + query).openConnection();
          //connection.setRequestProperty("Accept-Charset", charset);
  
          //InputStream response = connection.getInputStream();
  
      } catch (MalformedURLException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
      }
  </code></pre>
  
  <p>Now this code works fine. I can download the audio file and it works correctly. What I want to know is how to, if possible, get the name of the file as it is downloaded instead of giving it my own name. Also, is it possible to get the file without having to read from the stream (maybe some library that does it for you)? I kind of want to hide the dirty stuff.</p>
  
  <p>Thanks  </p>