API Rest - Upload client example
work in progress, la documentazione di seguito è parziale e non ancora completa
Di seguito verranno riportati codici di esempio utili per creare un client che interagisca correttamente con i server.
Upload API - V4 - C#
using System.Net.Http;
using (var client = new HttpClient())
{
String destinationPostUri = this.Configuration.ApiClient.Configuration.BasePath + "/v4/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", userAgent);
client.DefaultRequestHeaders.Add("X-App-Name", xAppName);
client.DefaultRequestHeaders.Add("X-App-Version", xAppVersion);
client.DefaultRequestHeaders.Add("X-Request-ID", xRequestID); // header parameter
client.DefaultRequestHeaders.Add("X-Correlation-ID", xCorrelationID); // header parameter
client.DefaultRequestHeaders.Add("X-User-ID", xUserID); // header parameter
client.DefaultRequestHeaders.Add("X-Item-ID", xItemID); // header parameter
client.DefaultRequestHeaders.Add("X-Manager-ID", xManagerID); // header parameter
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + this.Configuration.AccessToken);
client.DefaultRequestHeaders.Add("Accept", "*/*");
logManager.LogInfo($"destinationPostUri: {destinationPostUri} fileMetadata: {fileMetadata.ToJson()} {Environment.NewLine} details: {details.ToJson()} submitter: {submitter.ToJson()} holder: {holder.ToJson()} ");
// 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(holder.ToJson(), Encoding.UTF8, "application/json"), "holder");
multiForm.Add(new StringContent(submitter.ToJson(), Encoding.UTF8, "application/json"), "submitter");
multiForm.Add(new StreamContent(new MemoryStream(fileContent)), "file", fileMetadata.Name);
var response = await client.PostAsync(destinationPostUri, multiForm);
if (response.StatusCode != System.Net.HttpStatusCode.Created)
{
throw EvaluateAndThrowException(response, fileMetadata.Name, fileMetadata.Hash256, submitter.Username, 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 - V4 - Nodejs (axios)
const axios = require("axios");
const FormData = require("form-data");
const fs = require("fs");
const data = new FormData();
(async () => {
const fileMetadata = {
hash_256: "file_hash",
name: "file_name_1655808192642.eml",
externalApplicationId: "external_application_id",
};
const details = {
tipologia_documentale: "2056",
soggetti: [],
custom_metadata: {},
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: "I",
tipo_registro: "NESSUNO",
data: "2022-12-30T23:00:00.000Z",
numero: "2022",
},
};
const holder = {
countryId: "IT",
taxId: "tx_id",
vatNumber: "vat_number",
};
const submitter = { username: "submitter_username" };
// Add the required fields to the multipart payload
data.append("fileMetadata", JSON.stringify(fileMetadata), {
contentType: "application/json",
});
data.append("details", JSON.stringify(details), {
contentType: "application/json",
});
data.append("holder", JSON.stringify(holder), {
contentType: "application/json",
});
data.append("submitter", JSON.stringify(submitter), {
contentType: "application/json",
});
// Add the file as a stream to the multipart payload
data.append("file", fs.createReadStream("./file_path"));
// Configure the request object
const config = {
method: "post",
url: "https://digital-archive-upload.test.teamsystem.digital/v4/input-package",
headers: {
accept: "application/json",
"X-App-Name": "<app_name>",
"X-App-Version": "<app_version>",
"X-Request-ID": "<request_id>",
"X-Correlation-ID": "<correlation_id>",
"X-User-ID": "<user_id>",
Authorization: "<auth_token>",
"Content-Type": "application/json",
...data.getHeaders(),
},
data: data,
};
try {
// Perform the request
const response = await axios(config);
console.log("PRESERVATION ID", response.data);
} catch (error) {
console.error(error);
}
})();