Тело записи HttpPost, а также параметры запроса

Я использую Apache HttpPost. Я пытаюсь загрузить файлы на веб-сервер, и это приводит к следующему:

POST-сайт/загрузка?uploadType=chunked&requestId={requestId} HTTP/1.1

Host:

Accept: application/xml

Authtoken:

Request Parameters

requestId Уникальный идентификатор текущего сеанса загрузки.

Заголовки запроса

Хост Имя хоста веб-сервера.

Принять Формат ответа. Допустимые значения: application/xml или application/json.

Authtoken Маркер аутентификации, полученный после успешного входа в систему.

FileEOF Указывает, достигнут ли конец файла с текущим фрагментом файла. Допустимые значения: 0 и 1. Конец файла означает значение 1.

Тело запроса

Включить содержимое куска файла в байтах.

Я пришел к следующему:

HttpPost post = new HttpPost(url);
            post.setHeader("Authtoken", params.get("token"));
            String fileName = file.getName();
            long offset = Long.parseLong(chunkOffset);
            //...
            post.setHeader("FileEOF", eof);
            /*List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
            postParameters.add(new BasicNameValuePair("requestId", requestId));
            post.setEntity(new UrlEncodedFormEntity(postParameters));*/

            fileInputStream.skip(offset);
            fileInputStream.read(bytes);
            post.setEntity(new ByteArrayEntity(bytes));

Где я могу написать параметры для HttpPost здесь?


person dmachop    schedule 01.07.2015    source источник


Ответы (1)


Вам придется использовать MultipartEntity и FileBody при загрузке файлов.

Пример:

MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
entity.addPart("someparameter1", new StringBody("Woody"));
entity.addPart("someparameter2", new StringBody("Woodpecker"));
File fileToSend = new File(filePath);
FileBody fileBody = new FileBody(fileToSend, "application/octet-stream");
entity.addPart("upload_file", fileBody);

httpPost.setEntity(entity);

С MultipartEntityBuilder попробуйте следующее:

MultipartEntityBuilder builder = MultipartEntityBuilder.create();        
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

final File aFile = new File(fileName);
FileBody fileBody = new FileBody(file);

builder.addPart("file", fileBody);  
builder.addTextBody("requestId", requestId);
final HttpEntity httpEntity = builder.build();
person ring bearer    schedule 01.07.2015
comment
Спасибо. Я пробовал это HttpEntity entity = MultipartEntityBuilder.create() .addTextBody("requestId", requestId, ContentType.TEXT_PLAIN) .addBinaryBody("myfile", bytes, ContentType.DEFAULT_BINARY, fileName).build(); post.setEntity(entity); Все еще не работает, так как сервер не распознает параметр requestId. Передача параметра с URL-адресом работает. Как 2_. - person dmachop; 01.07.2015