Я пытаюсь отправить фотографию, сделанную моей камерой телефона / эмулятора, на сервер Node.js, поэтому кодирую ее, чтобы выполнить строковый запрос POST.
Я пытался закодировать его, используя другие ответы в Интернете, используя поток байтового массива и сжатую версию растрового изображения. На Node.js я пытаюсь декодировать его с помощью функции, которая наверняка работает; проблема в том, что кодировка, отправленная в Node.js из Java, неверна.
Вот кодировка растрового изображения:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] b = baos.toByteArray();
final String imageEncoded = Base64.encodeToString(b, Base64.DEFAULT);
И мой POST-запрос на строку выглядит так (я использую Volley для взаимодействия с сервером):
StringRequest postRequest = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
// response
Log.d("RESPONSE", response);
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
// error
Log.d("Error.Response", "ERROR" + error);
}
}
) {
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("image", imageEncoded);
return params;
}
};
VolleySingleton.getInstance(getApplicationContext()).addToRequestQueue(postRequest);
Я почти уверен, что проблема в том, что моя кодировка получает несколько дополнительных символов% при отправке на сервер, поэтому она не может быть хорошо декодирована. Я думал, что в моем коде Node.js мне пришлось использовать чанки для создания полной строки, например:
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
let body = [];
req.on('data', (chunk) => {
body.push(chunk);
}).on('end', () => {
body = Buffer.concat(body).toString();
body = body.split('=');
// More code here
}
Мое тело будет выглядеть как
"image=iVBORw0KGgoAAAANSUhEUgAAAHgAAACgCAIAAABIaz%2FH..."
поэтому мне пришлось использовать split, чтобы получить только кодировку, но она все равно не работала. Есть ли способ преобразовать эту строку в другую, которая не имеет такой URL-кодировки? Или пройти запрос POST без такой модификации?