Skip to main content

API Rest - Upload client example v4 (obsolete)

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 - curl

curl --location --request POST "https://digital-archive-upload.test.teamsystem.digital/v4/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>" \
--header "Content-Type: application/json" \
--form "fileMetadata=\"{\\\"hash_256\\\":\\\"<file_hash>\\\",\\\"name\\\":\\\"<file_name.eml>\\\",\\\"externalApplicationId\\\":\\\"<external_application_id>\\\"}\";type=application/json" \
--form "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\\\"
  }
}
\";type=application/json" \
--form "holder=\"{\\\"countryId\\\":\\\"IT\\\",\\\"taxId\\\":\\\"tax_id\\\",\\\"vatNumber\\\":\\\"vat_number\\\"}\";type=application/json" \
--form "submitter=\"{\\\"username\\\":\\\"submitter_username\\\"}\";type=application/json" \
--form "file=@\"1m\""

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.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);
  }
})();

Upload API - V4 - Java (OkHttpClient)

OkHttpClient client = new OkHttpClient().newBuilder().build();  
MediaType mediaType = MediaType.parse("application/json");

RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
  .addFormDataPart("fileMetadata", null,
     RequestBody.create(MediaType.parse("application/json"), "{\"hash_256\":\"<hash_file>\",\"name\":\"<file_name.eml>\",\"externalApplicationId\":\"<external_application_id>\"}".getBytes()))
  .addFormDataPart("details", null,
     RequestBody.create(MediaType.parse("application/json"), "{
  \"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\"
  }
}
".getBytes()))
  .addFormDataPart("holder", null,
     RequestBody.create(MediaType.parse("application/json"), "{\"countryId\":\"IT\",\"taxId\":\"<tax_id>\",\"vatNumber\":\"<vat_number>\"}".getBytes()))
  .addFormDataPart("submitter", null,
     RequestBody.create(MediaType.parse("application/json"), "{\"username\":\"<submitter_username>\"}".getBytes()))
  .addFormDataPart("file","file_name",
    RequestBody.create(MediaType.parse("application/octet-stream"),
    new File("file_path")))
  .build();

Request request = new Request.Builder()
  .url("https://digital-archive-upload.test.teamsystem.digital/v4/input-package")
  .method("POST", body)
  .addHeader("accept", "application/json")
  .addHeader("X-App-Name", "<app_name>")
  .addHeader("X-App-Version", "<app_version>")
  .addHeader("X-Request-ID", "<request_id>")
  .addHeader("X-Correlation-ID", "<correlation_id>")
  .addHeader("X-User-ID", "<user_id>")
  .addHeader("Authorization", "<auth_token>")
  .addHeader("Content-Type", "application/json")
  .build();

Response response = client.newCall(request).execute();