Обратите внимание, что я не пробовал, если этот код действительно работает с HttpURLConnection, но он должен.
Из того, что я прочитал из inte rnet, вы все равно можете использовать тот l oop, который вы упомянули но с некоторыми изменениями.
Я следовал учебнику по multipart / form-data здесь dev.to , чтобы сделать это больше учебным постом, я расскажу Вы, что этот метод, что должно произойти.
multipart / form-data отправляется так
--boundary
Content-Disposition: form-data; name="something1"
data1
--boundary
Content-Disposition: form-data; name="something2"
data2
--boundary--
Что я хотел бы сделать, это создать новый метод но вы можете просто написать код в уже существующем методе.
public byte[] get_multipart_data(List<String> files, String boundary)
Вы хотите написать border , за которым следует disposition , а затем данные . Сделайте это для всех файлов и затем отправьте закрывающую границу 1026 *. Это сгенерирует желаемую структуру multipart / form-data .
В псевдокоде это будет
loop for all files
write "--boundary"
write "Content-Disposition: ...."
write image_data
end
write "--boundary--"
Код можно записать так: сначала вы определяете свои переменные
ByteArrayOutputStream message = null;
DataOutputStream stream = null;
FileInputStream fileInputStream;
int maxBufferSize = 1024 * 1024;
byte[] buffer = new byte[maxBufferSize];
byte[] sendData = new byte[0];
Вот где будут генерироваться данные. Он начинается с объединения границы и последующего чтения данных. Эти данные записываются в поток, и вы продолжаете l oop для всех файлов / изображений.
try {
message = new ByteArrayOutputStream();
stream = new DataOutputStream(message);
// Loop though all file names
for(String fileName : files) {
stream.writeBytes("--" + boundary + "\r\n"); // Start boundary
stream.writeBytes("Content-Disposition: form-data; name=\"" + fileName + "\"\r\n\r\n");
// Read the image data
fileInputStream = new FileInputStream(fileName);
int readBytes = 0;
while((readBytes = fileInputStream.read(buffer)) != -1) {
// Write file data to output
stream.write(buffer, 0, readBytes);
}
fileInputStream.close();
stream.writeBytes("\r\n");
}
stream.writeBytes("--" + boundary + "--\r\n"); // Closing boundary
sendData = message.toByteArray();
} catch(IOException e) {
e.printStackTrace();
}
Теперь байтовый массив sendData
будет содержать multipart / form-data что вам нужно отправить с вашим HttpURLConnection.
Я давно не был так активен здесь. Скажите, если вам нужна дополнительная спецификация или я уточню свой текст: D