Я пытаюсь отправить файл на сервер с помощью следующего кодаОтправка файла 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?