2015-03-05 4 views
1

Я пытаюсь отправить файл на сервер с помощью следующего кодаОтправка файла Multipart с андроида на сервер

private static HttpEntity getHttpEntity(File[] files, List<BasicNameValuePair> 

otherParams, String fileName) { 

     MultipartEntityBuilder entity = MultipartEntityBuilder.create(); 
     entity.setCharset(Charset.forName("UTF-8")); 
     entity.setBoundary(BOUNDARY); 
     ContentType contentType = ContentType.create(HTTP.PLAIN_TEXT_TYPE, HTTP.UTF_8); 
     entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); 
     if (otherParams != null) { 
      for (NameValuePair pair : otherParams) { 
      entity.addTextBody(pair.getName(),pair.getValue(),contentType); 
      } 
     } 
     if (files != null) { 
      for(int i=0;i<files.length;++i) { 
      try { 
       FileInputStream inputStream = new FileInputStream(files[i]);    entity.addBinaryBody("file"+i,inputStream,ContentType.create(HTTP.OCTET_STREAM_TYPE), fileName); 
       LogUtils.d("added file:"+files[i].getAbsolutePath());// fileBody); 

      } catch (FileNotFoundException e) { 
       // TODO Auto-generated catch block 
       LogUtils.d("failed to add file"); 
      } 
      } 

     } 

     return entity.build(); 
    } 

Сервер показывает следующий журнал поступившего файла

2015-03-05 10:17:06,214 [4] DEBUG Controllers.ApiControllerBase - {[CallingFunction, UploadEventFile], [CallingFile, c:\Dropbox\src\Controllers\ValuesController.cs], [CallingLine, 1804], [CurrentUser, 123456789], [Message, got headers: [{"Key":"Content-Type","Value":["multipart/form-data; boundary=com.lenabru.apps; charset=UTF-8"]}]]} 
2015-03-05 10:17:06,214 [4] DEBUG Controllers.ApiControllerBase - {[CallingFunction, UploadEventFile], [CallingFile, c:\Dropbox\src\Controllers\ValuesController.cs], [CallingLine, 1805], [CurrentUser, 1234567890], [Message, got content: --com.lenabru.apps 
Content-Disposition: form-data; name="file0"; filename="lenkovi-jibrish" 
Content-Type: application/octet-stream 

?PNG 

IHDR ? , ??C? sBIT ??O? IDATx?d??%G?%v????%???L ??*??P ???)#B? ? ?'? ??2?A??= !e??fMuwa) ? $ ?glws7S???? $b????.G? ?? ?????*hf X P?(4??b @ `$?? I jB?? 1???F??? [email protected] 
#? R?P 0 ! ?TU ` ???#if?? ? 5R VS ?! (0 ???f U w? RX ??P3 ?A 
?? h L? ?fBRM?i" 
H03 T @C5Pa$D? ?F??`BT?? ?* ?? J? ?L ( BAZ I1 `?* j4?R5??? & ?)i [email protected]?__2V ?"0S?r 
??? [email protected]????????? ??? }?A ? ??? 3{yq???? ???X?????L?;?????w?g/?? ???nG?V??I? ? 
Truncated for the sake of the question 
--com.lenabru.apps-- 
]} 

В файле похоже, получена на сервере, но следующий фрагмент кода указывает, что к запросу прилагаются 0 файлов.

if (HttpContext.Current.Request.Files.Count < 1) 
      { 

       var error = Errors.NoFilesAttached; 

       Log(error.Description); 

       return Request.CreateResponse(error); 


      } 

Я использую следующие библиотеки для отправки запроса библиотеки загружается через Gradle

compile 'org.apache.james:apache-mime4j:0.7.2' 
compile('org.apache.httpcomponents:httpmime:4.3.6') 
compile 'org.apache.httpcomponents:httpcore:4.3.+' 

вопрос: почему, если бинарная часть получена на сервере, линии HttpContext.Current.Request.Files .Count всегда возвращает 0?

ответ

0

Это был преступник entity.setCharset (Charset.forName ("UTF-8"));

удаляя эту проблему исправил проблему

Смежные вопросы