У меня нет ничего окончательного, но я подозреваю, что есть что-то недопустимое в том, как вы настроили составную загрузку.
Чтобы помочь в этом разобраться, ниже приведен автономный рабочий скрипт для групповой загрузки с использованием HttpBuilder:
@Grab('org.codehaus.groovy.modules.http-builder:http-builder:0.7.1')
@Grab('org.apache.httpcomponents:httpmime:4.2.1')
import org.apache.http.entity.mime.content.*
import org.apache.http.entity.mime.*
import groovyx.net.http.HTTPBuilder
import static groovyx.net.http.Method.POST
fileUpload('https://httpbin.org/post', new File('data.txt'))
Map fileUpload(String url, File file){
println "doPost: $url body: ${file.name}"
def result
try {
new HTTPBuilder(url).request(POST) { req ->
requestContentType = "multipart/form-data"
def content = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE)
content.addPart(file.name, new InputStreamBody(file.newInputStream(), file.name))
req.entity = content
// json might be something else (like a reader)
// depending on the response content type
response.success = { resp, json ->
result = json
println "RESP: ${resp.statusLine}, RESULT: $json"
}
response.failure = { resp, json ->
println "My response handler got response: ${resp.statusLine}"
}
}
} catch (e) {
println "Could not perform POST request on URL $url"
throw e
}
result
}
Сценарий предполагает наличие файла data.txt
с данными для публикации в текущем каталоге. Сценарий отправляет на httpbin.org как рабочую конечную точку теста, измените его соответствующим образом, чтобы отправить на конечную точку.
Сохранение вышеупомянутого в test.groovy
и выполнение приведут к чему-то вроде:
~> groovy test.groovy
doPost: https://httpbin.org/post body: data.txt
RESP: HTTP/1.1 200 OK, RESULT: [args:[:], data:, files:[data.txt:{ "foo": "bar" }], form:[:], headers:[Accept:*/*, Connection:close, Content-Type:multipart/form-data; boundary=ZVZuV5HAdPOt2Sv7ZjxuUHjd8sDAzCz9VkTqpJYP, Host:httpbin.org, Transfer-Encoding:chunked], json:null, origin:80.252.172.140, url:https://httpbin.org/post]
(обратите внимание, что первый запуск займет некоторое время, так как Groovy виноград должен загрузить дерево зависимостей http-builder)
возможно, начиная с этого рабочего примера и возвращаясь к своему коду, вы сможете точно определить, что не работает в вашем коде.