view software/eXist/mpdl-modules/src/de/mpg/mpiwg/berlin/mpdl/doc/GetDocServlet.java @ 16:257f67be5c00

diverse Fehlerbehebungen
author Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
date Tue, 27 Sep 2011 16:40:57 +0200
parents 408254cf2f1d
children
line wrap: on
line source

package de.mpg.mpiwg.berlin.mpdl.doc;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URLConnection;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import de.mpg.mpiwg.berlin.mpdl.general.MpdlConstants;

public class GetDocServlet extends HttpServlet {
  private static final long serialVersionUID = -4889427839010526185L;

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String docEXistIdentifier = request.getParameter("doc");
    if (docEXistIdentifier == null || docEXistIdentifier.isEmpty()) {
      write(response, "Parameter: \"doc\" is not set. Please set parameter \"doc\".");
      return;
    }
    String docFileName = MpdlConstants.MPDL_EXIST_DATA_DIR + "/documents" + docEXistIdentifier;
    File docFile = new File(docFileName);
    if (docFile.exists())
      write(response, docFile);
    else
      write(response, "Document: " + docEXistIdentifier + " does not exist");
  }
  
  private void write(HttpServletResponse response, File file) throws IOException {
    String fileName = file.getName();
    OutputStream out = response.getOutputStream();
    BufferedInputStream is = new BufferedInputStream(new FileInputStream(file));
    String contentType = URLConnection.guessContentTypeFromName(fileName);  // other methods: URLConnection.guessContentTypeFromStream(is); or MIMEUtils.getMIMEType(file);
    if (contentType != null)
      response.setContentType(contentType);
    response.setHeader("Content-Disposition", "filename=" + fileName);
    byte[] buf = new byte[20000*1024]; // 20MB buffer
    int bytesRead;
    while ((bytesRead = is.read(buf)) != -1) {
      out.write(buf, 0, bytesRead);
    }
    is.close();
    out.flush();
    out.close();
  }

  private void write(HttpServletResponse response, String str) throws IOException {
    PrintWriter out = response.getWriter();
    out.write(str);
  }
  
}