Android httpservice загрузить файл из браузера - PullRequest
0 голосов
/ 06 марта 2012

Я создал http сервис на Android. И теперь я хочу загрузить файл из браузера на сервер (Android). Давайте посмотрим, что я сделал:

private static final String ALL_PATTERN = "*";
private static final String UPLOADFILE_PATTERN = "/UploadFile/*";
/* Some variables */
public WebServer(Context context) {
    this.setContext(context);
    httpproc = new BasicHttpProcessor();
    httpContext = new BasicHttpContext();
    httpproc.addInterceptor(new ResponseDate());
    httpproc.addInterceptor(new ResponseServer());
    httpproc.addInterceptor(new ResponseContent());
    httpproc.addInterceptor(new ResponseConnControl());
    httpService = new HttpService(httpproc,
        new DefaultConnectionReuseStrategy(), new DefaultHttpResponseFactory());
    registry = new HttpRequestHandlerRegistry();
    registry.register(ALL_PATTERN, new HomeCommandHandler(context));        
    registry.register(UPLOADFILE_PATTERN, new UploadCommandHandler(context));       
    httpService.setHandlerResolver(registry);
}

Затем я пишу URL в браузере (например, http://127.0.0.1:6789/home.html (играю с эмулятором)). Сервис Http отправляет мне форму, как показано ниже:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>File Upload</title>
</head>
<body>
<form method="POST" action="UploadFile/" enctype="multipart/form-data">
<p>File1 Test:
<input type="file" name="myfile1" size="20">
<input type="submit" value="Upload file">
<input type="reset" value="Reset" name="someName">  
</form>
</body>

Я выбираю какой-то файл и нажимаю «Отправить». После этого сервер вызывает этот метод:

 @Override
public void handle(HttpRequest request, HttpResponse response,
    HttpContext httpContext) throws HttpException, IOException {

    Log.e("","INSIDE UPLOADER");
    Log.e("Method",request.getRequestLine().getMethod());
    Log.e("len",request.getRequestLine()+"");
    for(Header h : request.getAllHeaders()){
        Log.e("len", h.getName()+" = "+h.getValue()); 
    }
}

Возвращает в LogCat:

Content-Length = 4165941
Content-Type = multipart/form-data; boundary=----WebKitFormBoundarykvmpGbpMd6NM1Lbk
Method POST /UploadFile/ HTTP/1.1

и другие параметры. У меня вопрос, где я могу получить содержимое файла? Я имею в виду некоторый InputStream или что-то еще. Я знаю, что HttpResponse имеет такой метод, как getContent (). Но у HttpRequest этого нет. Благодарю.

1 Ответ

1 голос
/ 06 марта 2012

Если HttpRequest содержит объект, он также должен реализовать HttpEntityEnclosingRequest .Это относится к вашему #handle(HttpRequest request, HttpResponse response) методу:

if (request instanceof HttpEntityEnclosingRequest) {
    HttpEntityEnclosingRequest entityRequest = (HttpEntityEnclosingRequest) request;
    HttpEntity entity = entityRequest.getEntity();
    if (entity != null) {
        // Now you can call entity.getContent() and do your thing
    }
}
...