Java - выгрузка OutputStream как загрузка HTTP-файла
У меня есть устаревшее приложение, которое пишет в OutputStream
и я хотел бы, чтобы содержимое этого потока было загружено в виде файла в сервлет. Я проверил сервлет, который использует commons-fileupload
, используя JMeter, и он работает просто отлично.
Я бы использовал Apache HttpClient, но это требует File
а не просто выходной поток. Я не могу написать файл локально; если была некоторая реализация в памяти File
возможно, это может сработать?
Я пытался использовать HttpURLConnection
(ниже), но сервер отвечает "MalformedStreamException: Поток неожиданно завершился".
URL url = new URL("http", "localhost", 8080, "/upload");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
String boundary = "---------------------------7d226f700d0";
connection.setRequestProperty("Content-Disposition", "form-data; name=\"file\"");
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary="+boundary);
connection.setRequestProperty("Accept", "application/json");
connection.setRequestMethod("POST");
connection.setChunkedStreamingMode(0);
connection.connect();
OutputStream out = connection.getOutputStream();
byte[] boundaryBytes =("--" + boundary + "\r\n").getBytes();
out.write(boundaryBytes);
//App writes to outputstream here
out.write("\r\n".getBytes());
out.write(("--"+boundary+"--").getBytes());
out.write("\r\n".getBytes());
out.flush();
out.close();
connection.disconnect();
1 ответ
PostMethod позволяет вам установить RequestEntity, который является интерфейсом, который вы можете реализовать. вам просто нужно реализовать RequestEntity.writeRequest
метод соответственно.
Или, если вы хотите, чтобы HttpClient обрабатывал многокомпонентный материал для вас, вы можете использовать MultipartRequestEntity с пользовательской деталью.