[Progress Communities] [Progress OpenEdge ABL] Forum Post: HTTP REST POST MULTIPART

Status
Not open for further replies.
J

jsandrea

Guest
Hi everyone, I would like to share with you this procedure, I was looking for documentation about this topic, but I could not found it, this code send an http rest multipart request to alfresco REST API in order to create a folder and inside of this a file . this is my code: USING Progress.Lang.*. USING OpenEdge.Core.*. USING OpenEdge.Net.HTTP.*. USING OpenEdge.Net.URI. USING Progress.Json.ObjectModel.JsonObject. USING OpenEdge.Net.MultipartEntity. USING OpenEdge.Net.MessagePart. USING OpenEdge.Net.HTTP.IHttpRequest. USING OpenEdge.Net.HTTP.IHttpResponse. USING OpenEdge.Net.HTTP.Lib.ClientLibraryBuilder. USING OpenEdge.Net.MessagePart. USING OpenEdge.Net.MultipartEntity. DEFINE VARIABLE oClient AS IHTTPClient NO-UNDO. DEFINE VARIABLE oURI AS URI NO-UNDO. DEFINE VARIABLE oRequest AS IHttpRequest NO-UNDO. DEFINE VARIABLE oResponse AS IHttpResponse NO-UNDO. DEFINE VARIABLE oResponsejson AS JsonObject NO-UNDO. DEFINE VARIABLE oMultiEntity AS MultipartEntity NO-UNDO. DEFINE VARIABLE mData AS MEMPTR NO-UNDO. DEFINE VARIABLE otransforms AS OpenEdge.Core.Memptr NO-UNDO. DEFINE VARIABLE oPart AS CLASS MessagePart NO-UNDO. DEFINE VARIABLE class1 AS CLASS OpenEdge.Core.String. DEFINE VARIABLE transforms AS LONGCHAR NO-UNDO . ASSIGN oMultiEntity = NEW MultipartEntity() oMultiEntity:Boundary = GUID . COPY-LOB FROM FILE "c:\temp\CcLicense.jar" TO mData. /*You need to specify each part of http petition*/ /*PART 1: file*/ ASSIGN otransforms = NEW OpenEdge.Core.Memptr(mData) oPart = NEW OpenEdge.Net.MessagePart("application/octet-stream",otransforms) oPart:ContentId = 'filedata':u. oPart:Headers:put(HttpHeaderBuilder:Build('Content-Disposition') :Value('form-data; name="filedata"; filename="CcLicense.jar"') :Header). oMultiEntity:AddPart(oPart). /*PART 2: destination*/ ASSIGN transforms = "workspace://SpacesStore/20a4ca91-6807-426f-b2a1-98ac5c71363f" class1 = NEW OpenEdge.Core.String(transforms) oPart = NEW OpenEdge.Net.MessagePart() oPart:Body = class1 oPart:ContentId = 'destinationww':u. oPart:Headers:put(HttpHeaderBuilder:Build('Content-Disposition') :Value('form-data; name="destination"') :Header). oMultiEntity:AddPart(oPart). /*EXECUTION OF HTTP PETITION*/ oClient = ClientBuilder:Build():KeepCookies(CookieJarBuilder:Build():CookieJar):Client. oURI = NEW URI('http', "172.21.24.14", 10001). /*URL y puerto*/ oURI:path = '/alfresco/service/api/upload?alf_ticket=TICKET_865d1704302d5798c8e6916c97cc4c468734742d'. /*ruta del servicio*/ oRequest = RequestBuilder:pOST(oURI, oMultiEntity) :ContentType('multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW') :AcceptJson() :AcceptFormData() :Request. oResponse = ClientBuilder:Build() :Client:Execute(oRequest). oResponsejson = CAST(oResponse:entity,JsonObject) . /*CATH HTTP RESPONSE*/ IF oResponse:StatusCode <> 200 AND oResponse:StatusCode <> 201 THEN DO: MESSAGE STRING(oResponsejson:GetJsonObject('status'):GetJsonText('description')) VIEW-AS ALERT-BOX. MESSAGE STRING(oResponsejson:GetJsonText('message')) VIEW-AS ALERT-BOX. END. MESSAGE STRING(oResponse:StatusReason) VIEW-AS ALERT-BOX. DELETE OBJECT oResponsejson NO-ERROR. DELETE OBJECT oMultiEntity NO-ERROR. DELETE OBJECT class1 NO-ERROR. DELETE OBJECT oURI NO-ERROR. DELETE OBJECT oPart NO-ERROR. DELETE OBJECT oRequest NO-ERROR. DELETE OBJECT oClient NO-ERROR. SET-SIZE(mData) = 0. I hope this could be useful to someone. Jaime Sandrea.

Continue reading...
 
Status
Not open for further replies.
Top