Ajouter un document à un objet

Principe

Cette API permet, depuis une application tierce, d'ajouter une pièce jointe à un objet (échantillon, contenant). L'API autorise soit le téléchargement d'un nouveau fichier, soit le référencement d'un fichier si la collection autorise le stockage externe des documents.

Identification

Consultez ce document pour créer l'utilisateur de l'API, générer un token et lui donner les droits adéquats : Identification pour les API

Méthode d'appel

URL : apiv1documentWrite

L'API doit être appelée en mode http POST.

Variables à fournir

Paramètre Contenu
uid, uuid ou identifier UID, UUID ou identifiant métier (déconseillé) de l'objet cible (obligatoire)
token jeton d'identification (obligatoire)
login login associé au jeton (token). Les deux informations doivent être fournies pour que l'identification soit réalisée
document_name nom du document. Si non renseigné, il sera déduit du nom du document transmis
document_creation_date Date de création du document, au format dd/mm/YYYY
external_storage_path Chemin d'accès au fichier, si celui-ci est stocké en dehors de la base de données

Si vous renseignez la variable external_storage_path, le fichier cible doit exister dans l'arborescence externe et être accessible au serveur web.

Exemple d'envoi d'un fichier

Voici un exemple d'envoi d'un fichier vers le serveur, écrit en PHP :

<?php
$address = "https://monsite.collec-science.org";
$params = [
    "login" => "compteapi",
    "token" => "SECRET",
    "uid" => 1234
];
$fileToSend = "/home/equinton/Images/eel.jpg";
$method = "POST";
$debugMode = false;
class ApiCurlException extends Exception {};
function makeCurlFile($file)
{
    $mime = mime_content_type($file);
    $info = pathinfo($file);
    $name = $info['basename'];
    $output = new CURLFile($file, $mime, $name);
    return $output;
}
function apiCall($method, $url, $certificate_path = "", $data = array(), $modeDebug = false, $file = "")
{
    $curl = curl_init($url);
    if (!$curl) {
        throw new ApiCurlException(_("Impossible d'initialiser le composant curl"));
    }
    if (!empty($file)) {
        $data["file"] = makeCurlFile($file);
    }
    switch ($method) {
        case "POST":
            curl_setopt($curl, CURLOPT_POST, true);
            if (!empty($data)) {
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            }
            break;
        case "PUT":
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
            if (!empty($data)) {
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            }
            break;
        default:
            if (!empty($data)) {
                $url = sprintf("%s?%s", $url, http_build_query($data));
                echo "URL: $url" . PHP_EOL;
            }
    }
    /**
     * Set options
     */
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    if (!empty($certificate_path)) {
        curl_setopt($curl, CURLOPT_SSLCERT, $certificate_path);
    }
    curl_setopt($curl, CURLOPT_SSL_VERIFYSTATUS, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    if ($modeDebug) {
        curl_setopt($curl, CURLOPT_VERBOSE, true);
    }
    /**
     * Execute request
     */
    $res = curl_exec($curl);
    if ($res === false) {
        throw new ApiCurlException(
            sprintf(
                _("Une erreur est survenue lors de l'exécution de la requête vers le serveur distant. Code d'erreur CURL : %s"),
                curl_error($curl)
            )
        );
    }
    curl_close($curl);
    return $res;
}
echo "Méthode : " . $method . PHP_EOL;
echo "Adresse : " . $address . "/" . $page . PHP_EOL;
echo "Paramètres" . PHP_EOL;
print_r($params);

$res = apiCall($method, $address . "/" . $page, "", $params, $debugMode, $fileToSend);
if ($res == "null") {
    echo "résultat : null" . PHP_EOL;
} else {
    if ($page == "apiv1documentGet") {
        file_put_contents("test.txt", $res);
    } else {
        print_r(json_decode($res, true));
    }
}

Ce script est prévu pour s'exécuter en ligne de commande :

php testapi.php