Upload client example
work in progress, the documentation below is partial and not yet complete
Below you’ll find example code snippets useful for creating a client that correctly interacts with the servers.
Upload API - V1 - curl​
curl --location --request POST 'https://digital-archive-upload.test.teamsystem.digital/digital/v1/input-package' \
--header 'accept: application/json' \
--header 'X-App-Name: <app_name>' \
--header 'X-App-Version: <app_version>' \
--header 'X-Request-ID: <request_id>' \
--header 'X-Correlation-ID: "<correlation_id>"' \
--header 'X-User-ID: <user_id>' \
--header 'Authorization: <bearer_token>' \
--form 'fileMetadata="{\"hash_256\":\"a66593d9627f4a8f84ac6554bc8e75f50985bdac8eac70e7d4835b3a945d4e5d\",\"name\":\"file_name_1667815432976.xml\",\"externalApplicationId\":\"test\"}";type=application/json' \
--form 'details="{ \"tipologia_documentale\": \"1001\", \"soggetti\": [{ \"tipo\": \"PG\", \"ruolo\": \"SER\", \"denominazione\": \"Test Spa\", \"codice_fiscale\": \"12345677889\", \"id_paese\": \"IT\"},{ \"tipo\": \"PG\", \"ruolo\": \"DESTINATARIO\", \"denominazione\": \"Test Spa\", \"codice_fiscale\": \"12345677889\", \"id_paese\": \"IT\"} ], \"custom_metadata\": {\"tipo_formato\": \"FPR12\",\"identificativo_sdi\": \"aaabbbccccddd\",\"codice_tipo_documento\": \"TD01\" }, \"modalita_formazione\": \"A\", \"riservato\": false, \"verifica\": {\"firmato_digitalmente\": true,\"sigillato_elettronicamente\": false,\"marcatura_temporale\": false,\"conformita_copie_immagine\": false }, \"versione\": \"1\", \"anno_riferimento\": 2022, \"allegati\": { \"numero_allegati\": 0 }, \"chiave_descrittiva\": { \"oggetto\": \"Altre Comunicazioni\" }, \"dati_registrazione\": {\"tipologia_flusso\": \"U\",\"tipo_registro\": \"NESSUNO\",\"data\": \"2022-12-30T23:00:00.000Z\",\"numero\": \"2022\" }}";type=application/json' \
--form 'holderUuid="\"4633c44b-02ce-4c8c-aada-7f7385d3ef29\"";type=application/json' \
--form 'submitterUuid="\"4633c44b-02ce-4c8c-aada-7f7385d3ef29\"";type=application/json' \
--form 'file=@"/home/cicuz/Desktop/fastlane-docs/original.xml"
Upload API - V1 - C#​
using System.Net.Http;
using (var client = new HttpClient())
{
String destinationPostUri = "https://digital-archive-upload.test.teamsystem.digital/digital/v1/input-package";
client.Timeout = new TimeSpan(0, 10, 0);
client.MaxResponseContentBufferSize = 320*1024*1024;
client.DefaultRequestHeaders.Add("cache-control", "no-cache");
client.DefaultRequestHeaders.Add("accept", "application/json");
client.DefaultRequestHeaders.Add("Connection", "keep-alive");
client.DefaultRequestHeaders.Add("User-Agent", this.Configuration.ApiClient.ParameterToString(userAgent));
client.DefaultRequestHeaders.Add("X-App-Name", this.Configuration.ApiClient.ParameterToString(xAppName));
client.DefaultRequestHeaders.Add("X-App-Version", this.Configuration.ApiClient.ParameterToString(xAppVersion));
client.DefaultRequestHeaders.Add("X-Request-ID", this.Configuration.ApiClient.ParameterToString(xRequestID)); // header parameter
client.DefaultRequestHeaders.Add("X-Correlation-ID", this.Configuration.ApiClient.ParameterToString(xCorrelationID)); // header parameter
client.DefaultRequestHeaders.Add("X-User-ID", this.Configuration.ApiClient.ParameterToString(xUserID)); // header parameter
client.DefaultRequestHeaders.Add("X-Item-ID", this.Configuration.ApiClient.ParameterToString(xItemID)); // header parameter
client.DefaultRequestHeaders.Add("X-Manager-ID", this.Configuration.ApiClient.ParameterToString(xManagerID)); // header parameter
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + xUserID.SecurityToken.Replace("Bearer", "").Trim());
client.DefaultRequestHeaders.Add("Accept", "*/*");
// we need to send a request with multipart/form-data
var multiForm = new MultipartFormDataContent("----MyBoundary");
// add API method parameters
multiForm.Add(new StringContent(fileMetadata.ToJson(), Encoding.UTF8, "application/json"), "fileMetadata");
multiForm.Add(new StringContent(details.ToJson(), Encoding.UTF8, "application/json"), "details");
multiForm.Add(new StringContent($"\"{holderUuId}\"", Encoding.UTF8, "application/json"), "holderUuid");
multiForm.Add(new StringContent($"\"{submitterUuId}\"", Encoding.UTF8, "application/json"), "submitterUuid");
multiForm.Add(new StreamContent(new MemoryStream(fileContent)), "file", fileMetadata.Name);
// send request to API
var response = await client.PostAsync(destinationPostUri, multiForm);
if (response.StatusCode != System.Net.HttpStatusCode.Created)
{
throw EvaluateAndThrowException(response, fileMetadata.Name, fileMetadata.Hash256, submitterUuId, xCorrelationID);
}
else
{
String result = response.Content.ReadAsStringAsync().Result;
return new ApiResponse<UploadResponse>((int)response.StatusCode,
response.Headers.ToDictionary(x => x.Key, x => string.Join(",", x.Value)),
(UploadResponse)JsonConvert.DeserializeObject(result, typeof(UploadResponse), this.Configuration.ApiClient.serializerSettings));
}
}
Upload API - V1 - Nodejs​
const request = require("request");
const fs = require("fs");
const uriToInvoke = "https://digital-archive-upload.test.teamsystem.digital/digital/v1/input-package";
console.log(`Invoking of ${uriToInvoke} fileMetadata: ${fileMetadataPayload} details: ${detailsPayload}`);
const options = {
method: "POST",
url: uriToInvoke,
headers: {
"accept": "application/json",
"Accept": "*/*",
"X-App-Name": archiveListenerPusherEnvironment.getAppName(),
"X-App-Version": archiveListenerPusherEnvironment.getAppVersion(),
"X-Request-ID": uuidv1(),
"X-Correlation-ID": correlationId,
"X-User-ID": archiveListenerPusherEnvironment.getAppName(),
"X-Item-ID": archiveListenerPusherEnvironment.getAppName(),
"X-Manager-ID": payload.getSubmitterUuid(),
"Authorization": "Bearer " + archiveListenerPusherEnvironment.getInputPackagedigitalV1ApiM2MToken(),
"Content-Type": "application/json",
"cache-control": "no-cache",
"Connection": "keep-alive",
"User-Agent": archiveListenerPusherEnvironment.getAppName(),
},
formData: {
fileMetadata: {
value: fileMetadataPayload,
options: {
contentType: "application/json"
}
},
details: {
value: detailsPayload,
options: {
contentType: "application/json"
}
},
holderUuid: {
value: `"${payload.getHolderUuid()}"`,
options: {
contentType: "application/json"
}
},
submitterUuid: {
value: `"${payload.getSubmitterUuid()}"`,
options: {
contentType: "application/json"
}
},
file: {
value: fs.createReadStream(resourceToUpload),
options: {
filename: payload.getFileMetadata().getName(),
contentType: "application/octet-stream"
}
}
}
};
request(options, (error, response, body) => {
if (error) throw new Error(error);
if (response.statusCode !== 200) {
throw new Error(response.statusMessage);
}
const entity = JSON.parse(body);
return entity;
});
Upload API - V1 - Java (OkHttpClient)​
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("application/json");
String fileMetadataPayload = getPayload(payload.getFileMetadata());
String detailsPayload = getPayload(payload.getDetails());
String uriToInvoke = "https://digital-archive-upload.test.teamsystem.digital/digital/v1/input-package";
log.info(m, "Invoking of " + uriToInvoke + " fileMetadata: " + fileMetadataPayload + " details: " + detailsPayload);
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("fileMetadata", null,
RequestBody.create(MediaType.parse("application/json"),fileMetadataPayload.getBytes(StandardCharsets.UTF_8) ))
.addFormDataPart("details", null,
RequestBody.create(MediaType.parse("application/json"), detailsPayload.getBytes(StandardCharsets.UTF_8)))
.addFormDataPart("holderUuid", null,
RequestBody.create(MediaType.parse("application/json"), "\"" + payload.getHolderUuid() + "\""))
.addFormDataPart("submitterUuid", null,
RequestBody.create(MediaType.parse("application/json"), "\"" + payload.getSubmitterUuid() + "\""))
.addFormDataPart("file", payload.getFileMetadata().getName(),
RequestBody.create(MediaType.parse("application/octet-stream"), resourceToUpload))
.build();
//https://digital-archive-upload.test.teamsystem.digital/digital/v1/backoffice/input-package
Request request = new Request.Builder()
.url(uriToInvoke)
.method("POST", body)
.addHeader("accept", "application/json")
.addHeader("Accept", "*/*")
.addHeader("X-App-Name", archiveListenerPusherEnvironment.getAppName())
.addHeader("X-App-Version", archiveListenerPusherEnvironment.getAppVersion())
.addHeader("X-Request-ID", UUID.randomUUID().toString())
.addHeader("X-Correlation-ID", correlationId)
.addHeader("X-User-ID", archiveListenerPusherEnvironment.getAppName())
.addHeader("X-Item-ID", archiveListenerPusherEnvironment.getAppName())
.addHeader("X-Manager-ID", payload.getSubmitterUuid())
.addHeader("Authorization", "Bearer " + archiveListenerPusherEnvironment.getInputPackagedigitalV1ApiM2MToken())
.addHeader("Content-Type", "application/json")
.addHeader("cache-control", "no-cache")
.addHeader("Connection", "keep-alive")
.addHeader("User-Agent", archiveListenerPusherEnvironment.getAppName())
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) {
throw new Exception(response.message());
}
ResponseBody responseBody = response.body();
if (responseBody == null)
{
throw new UnexpectedException("Response body from digital v1 is null. Unexpected empty response");
}
DigitalV1Response entity = mapper.readValue(responseBody.string(), DigitalV1Response.class);
return entity;