2012-03-06 4 views
0

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

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

Если 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 
    } 
} 
+0

Спасибо. Я попробую это завтра! – Nolesh