У меня есть что-то вроде этого в моем коде:
String boundary = "thisIsMyBoundaryString";
StringBuilder body = new StringBuilder();
...
byte[] data = bos.toByteArray();
body.append(new String(data));
body.append("\r\n--" + boundary + "--\r\n");
String entity = body.toString();
Я строю запрос POST и мне нужно вставить некоторые двоичные данные (сжатый растровый рисунок JPEG).
После добавления byteArray, Я хочу добавить newLine и граничную строку,
, но StringBuilder поврежден - кажется, что байты от добавленной границы
смещаются с этой точки на
, и они больше не интерпретируются как моя исходная строкано как некоторые случайные символы.
Это то, что здесь происходит?
Как я могу решить эту проблему?Может быть, я должен добавить байт заполнения к byteArray перед добавлением границы?
Как правильно добавить двоичные данные в запрос POST?
Обратите внимание, что при использовании Base64 кодировка здесь не вариант
[править]
Решение заключалось в том, чтобы использовать MultipartEntity для выполнения таких запросов
и забыть о добавлении границ вручную.
Вот соответствующий фрагмент кода:
FileBody bin = new FileBody(new File(Environment.getExternalStorageDirectory() + "/" + FILE_NAME));
MultipartEntity entity = new MultipartEntity();
entity.addPart("message", new StringBody("A message that goes with request"));
entity.addPart("file", bin);
(третья строка должна быть внутри блока try / catch, но я удалил ее для удобства чтения)