Я пишу свой собственный groovy сценарий в WorkFusion ide, и мне нужно отправить multipart/form-data
в бэкэнд, но я не могу использовать внешние библиотеки для этого, поскольку вы не можете импортировать их в WorkFusion.
Это то, что я придумал до сих пор, но я застрял в каждом TODO:
// Mapping the variables
@CustomScriptAction(
input = ['bearer_token', 'organisation_id', 'project_id', 'files'],
output = 'json'
)
// Sending the files
def customScript() {
def url = "https://x.y.com/gql/api/organisations/" + organisation_id + "/projectId/" + project_id + "/process"
try {
def postConnection = new URL(url)
HttpURLConnection http = (HttpURLConnection) postConnection.openConnection()
http.setRequestProperty("Authorization", "Bearer " + bearer_token)
http.setRequestProperty("Content-Type", "multipart/form-data")
http.setDoOutput(true)
http.setRequestMethod('POST')
// TODO: create multipart and send as content
def multipart
files.each {
ContentHandler
def content = new FileInputStream(new File(it))
def name = getName(it)
content.setRequestProperty(getContentType(name))
multipart.addBinaryBody("files", content , name)
}
// TODO: write away the multipartContent
http.getOutputStream().write(multipart)
def responseCode = http.getResponseCode()
def response
if(responseCode >= 200 && responseCode < 300) {
response = http.getInputStream().getText()
}
// TODO: parse uploadId from response
def upload_id
def polling = true
def counter = 1
def get = new URL(url + "/" + upload_id).openConnection()
def getResponse
do {
// TODO: parse get response
getResponse = get.getInputStream().getText()
switch(getResponse) {
case "DONE":
polling = false;
break
case "DOCUMENT_CLASSIFICATION_INTERVENTION":
case "ENTITY_EXTRACTION_INTERVENTION":
throw new Exception("Intervention needed")
case "FAILED":
throw new Exception("Something went wrong during the processing process")
default:
counter++
break
}
// Sleep for 7 seconds before resending the request.
Thread.sleep(7000)
} while(polling && counter <= 150)
// TODO: parse and format json (getResponse)
} catch(all) {
throw new Exception(all.getMessage())
}
}
def getContentType(String name){
def splitName = name.split(".")
def extension = splitName[1]
switch (extension) {
case "pdf":
return "application/pdf";
case "png":
return "image/png";
case "doc":
return "application/msword";
case "docx":
return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
case "txt":
return "text/plain";
case "tif":
return "image/tif";
case "jpg":
return "image/jpg";
case "rtf":
return "application/rtf";
// default == not supported type, we don't set content type
default:
return "";
}
}
def getName(String path) {
// Java equivalent of \\
def splitPath = path.split("\\\\")
return splitPath[splitPath.length - 1]
}
, например, как я могу использовать MultiPartEntityBuilder
или как его эквивалент. Для разбора ответов (json) мне нужно создавать классы, соответствующие этим объектам, или я могу работать с json так же, как я бы в javascript?
Любая помощь очень ценится!