/** * Copyright (c) 2009 - 2011 AppWork UG(haftungsbeschränkt) <e-mail@appwork.org> * * This file is part of org.appwork.utils.net.httpserver.test * * This software is licensed under the Artistic License 2.0, * see the LICENSE file or http://www.opensource.org/licenses/artistic-license-2.0.php * for details */ package org.appwork.utils.net.httpserver.test; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import org.appwork.net.protocol.http.HTTPConstants; import org.appwork.net.protocol.http.HTTPConstants.ResponseCode; import org.appwork.utils.net.ChunkedOutputStream; import org.appwork.utils.net.HTTPHeader; import org.appwork.utils.net.Input2OutputStreamForwarder; import org.appwork.utils.net.httpserver.HttpRequestHandler; import org.appwork.utils.net.httpserver.requests.GetRequest; import org.appwork.utils.net.httpserver.requests.HttpRequest; import org.appwork.utils.net.httpserver.requests.PostRequest; import org.appwork.utils.net.httpserver.responses.HttpResponse; /** * @author daniel * */ public class FileHandler implements HttpRequestHandler { /* * (non-Javadoc) * * @see * org.appwork.utils.net.httpserver.HttpRequestHandler#canHandle(org.appwork * .utils.net.httpserver.requests.HttpRequest) */ public boolean canHandle(final HttpRequest request) { final String path = request.getRequestedPath(); final File f = new File("/home/daniel", path); if (f.exists() && f.isFile()) { return true; } return false; } /* * (non-Javadoc) * * @see * org.appwork.utils.net.httpserver.HttpRequestHandler#onGetRequest(org. * appwork.utils.net.httpserver.requests.GetRequest, * org.appwork.utils.net.httpserver.responses.HttpResponse) */ @Override public boolean onGetRequest(final GetRequest request, final HttpResponse response) { if (!this.canHandle(request)) { return false; } final String path = request.getRequestedPath(); final File f = new File("/home/daniel", path); response.setResponseCode(ResponseCode.SUCCESS_OK); response.getResponseHeaders().add(new HTTPHeader(HTTPConstants.HEADER_REQUEST_CONTENT_TYPE, "application/octet-stream")); try { response.getResponseHeaders().add(new HTTPHeader("Content-Disposition", "attachment;filename*=UTF-8''" + URLEncoder.encode(f.getName(), "UTF-8"))); } catch (final UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } response.getResponseHeaders().add(new HTTPHeader(HTTPConstants.HEADER_RESPONSE_TRANSFER_ENCODING, HTTPConstants.HEADER_RESPONSE_TRANSFER_ENCODING_CHUNKED)); try { final ChunkedOutputStream co = new ChunkedOutputStream(response.getOutputStream(), 2048); final Input2OutputStreamForwarder fw = new Input2OutputStreamForwarder(new FileInputStream(f), co, 4096); try { fw.forward(); } catch (final InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } co.close(); } catch (final IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return true; } /* * (non-Javadoc) * * @see * org.appwork.utils.net.httpserver.HttpRequestHandler#onPostRequest(org * .appwork.utils.net.httpserver.requests.PostRequest, * org.appwork.utils.net.httpserver.responses.HttpResponse) */ @Override public boolean onPostRequest(final PostRequest request, final HttpResponse response) { return false; } }