Я пытаюсь загрузить (POST) файл в конечную точку, используя java.net.HttpURLConnection, но получаю http-код 400 (неверный запрос).
Я ссылался на Отправка файла и параметров на сервер с HttpURLConnection в Android API 23
но проблема в том, что мне нужно отправить этот файл в качестве параметра тела запроса (file =).
Примечание. Файлы будут иметь небольшой размер (4-5 МБ), поэтому я полностью читаю их в памяти.
Соответствующий запрос curl:
curl -X POST "API" -H "Тип контента: multipart / form-data" -F "file ="
Выдержки из кода, который я использую:
Proxy webproxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("
<proxy host>", <proxy_port>));
HttpURLConnection http_conn = (HttpURLConnection)
url.openConnection(webproxy);
String authorization = getAuthorization(access_token);
http_conn.setRequestMethod("POST");
http_conn.setRequestProperty("Accept-Charset", "UTF-8");
http_conn.setRequestProperty("Authorization", authorization);
http_conn.setRequestProperty("Connection", "Keep-Alive");
http_conn.setRequestProperty("Content-Type", "multipart/form-data);
http_conn.setDoOutput(true);
http_conn.setDoInput(true);
DataOutputStream outputStream;
outputStream = new DataOutputStream(http_conn.getOutputStream());
File file_obj = new File(this.file);
byte[] allBytes = new byte[(int) file_obj.length()];
FileInputStream fileInputStream = new FileInputStream(file_obj);
outputStream.write("file=".getBytes("UTF-8")); <---Trying to add file param here
fileInputStream.read(allBytes);
outputStream.write(allBytes);
Пост, что я только что прочитал ответ, используя приведенный ниже фрагмент кода (отлично работает для разных запросов GET):
InputStream inputStream = http_conn.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new
InputStreamReader(inputStream));
String line = "";
while ((line = bufferedReader.readLine()) != null) {
data = data + line;
}
Примечание: я редко использую java, и я не очень хорошо с ней знаком, поэтому, пожалуйста, дайте пояснения в своем ответе.