Я пытаюсь получить POST-запрос multipart / form-data на сервер Tomcat 8.5.38 и Java 11.0.2. Я могу получить запрос очень хорошо, и println-отладил мой способ видеть, что заголовки и содержимое отображаются , чтобы быть правильными:
host: localhost:8443
connection: keep-alive
content-length: 305
accept: application/json, text/plain, */*
origin: https://localhost:8443
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36
dnt: 1
content-type: multipart/form-data; boundary=----WebKitFormBoundaryC8B7mlMCS5oRcK7O
referer: https://localhost:8443/myrestfulthing
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9
cookie: OPUSSESSIONID=850E4969DA073026ABCFB954C1EBB33C; cfid=dc2d9c2d-9cc0-4fc7-bd12-c79800278c66; cftoken=0
------WebKitFormBoundaryC8B7mlMCS5oRcK7O
Content-Disposition: form-data; name="name"
foobar
------WebKitFormBoundaryC8B7mlMCS5oRcK7O
Content-Disposition: form-data; name="data"; filename="file.pdf"
Content-Type: application/octet-stream
<<binary data...>>
------WebKitFormBoundaryC8B7mlMCS5oRcK7O--
(я отключаю вышеуказанное ведение журнала отладки при запуске кода проблемы ниже).
Я прибегнул к использованию хлебных крошек в примере кода Apache, чтобы выяснить, где моя ошибка:
try {
ServletFileUpload upload = new ServletFileUpload();
System.out.println("A");
FileItemIterator iter = upload.getItemIterator(request);
System.out.println("B");
while (iter.hasNext()) {
iter.next();
}
}
catch (Exception e) {
System.out.println(e);
}
Это отправляет A
на консоль и никогда не достигает B
, но также не выдает никаких исключений. Он просто зависает после upload.getItemIterator(request)
, и я снова получаю ошибку 500 в браузере. В конечном итоге вопрос: почему он здесь блокируется?
Код на стороне клиента - это простой угловой вызов:
let file = this.fileInput.nativeElement.files[0];
let formData = new FormData();
formData.set("name", this.uploadForm.name);
formData.set("data", file);
this.http.post("/foo/secure/pad", formData).subscribe(...