API TransfertPro

Manipuler la boite de réception

Lister le contenu de la boite de réception

TransfertPro vous permet de récupérer la liste des fichiers présents dans la boite de réception de l'utilisateur courant. Seuls les fichiers respectant les critères suivants sont retournés :
  • Le nombre de téléchargement du fichier ne doit pas dépasser la limite de téléchargement par fichier de la société de l'utilisateur courant.
  • Le fichier doit être en ligne.
  • L'utilisateur ne doit pas avoir supprimé le fichier sur son poste s'il utilise le client de synchronisation.
La liste des fichiers est triée par date de création décroissante. Si le workflow de validation est actif pour la société de l'utilisateur courant, alors le tri se fait sur la date de validation. Référence : Inbox/GetContent Exemple :

var inboxFiles = new List();
var request = CreateRequest("https://ext.transfertpro.com/api/v5/Inbox/", "application/json", HttpMethod.Get);
try
{
    using (HttpResponseMessage response = GetHttpClient().SendAsync(request).Result)
    {
        if (response.IsSuccessStatusCode)
        {
            string json = response.Content.ReadAsStringAsync().Result;
            var results = JsonConvert.DeserializeObject>(json);

            foreach (dynamic result in results)
            {
                inboxFiles.Add(new FileGeneric() { Id = result.gValue,
                    FileName = result.name,
                    FileSize = result.fileSize,
                    DateComplete = result.date,
                    Checksum = result.checksum,
                    IsShadow = result.shadow });
            }
        }
        else
        {
            // Gérer les codes status 400, 401, 403...
        }
    }

    request.Dispose();
}
catch (Exception ex)
{
    // Gérer les exceptions
}

return inboxFiles;

Télécharger un fichier de la boite de réception

Url de base : https://dl.transfertpro.com/download/inbox TransfertPro vous permet de télécharger un fichier présent dans la boite de réception. Seul l'utilisateur courant peut télécharger les fichiers de la boite de réception. L'appel à la méthode retourne un flux en lecture seule sur le fichier. Dans le cas où le fichier a été envoyé à l'utilisateur avec l'option 'Shadow' activée, il est impératif de fournir le mot de passe en paramètre de la requête.

Paramètres :

Nom du paramètre Obligatoire Description Type
i Oui Id du fichier string
n Oui Nom du fichier string
s Non Mot de passe du fichier si l’envoi a été fait avec le mode ‘Shadow’ activé string

Exemple d'appel


//Construction de l’url
var requestUrl = "https://dl.transfertpro.com/download/inbox?";
requestUrl += "i=" + fileToDownloadId;
requestUrl += "&n=" + fileToDownloadName;
requestUrl += "&s=" + fileToDownloadShadow;

//Instanciation de la requête
var request = new HttpRequestMessage(HttpMethod.Get, requestUrl);
    
try
{
//Envoi de la requête
    var response = GetHttpClient().SendAsync(request, HttpCompletionOption.ResponseHeadersRead).ContinueWith(task =>
    {
        var responseMessage = task.Result;
        if(responseMessage.IsSuccessStatusCode)
        {
            using (var responseStream = responseMessage.Content.ReadAsStreamAsync().Result)
            {
                // Lire le flux en lecture sur le fichier
            }
        }
        else
        {
            // Gérer les codes status 400, 401, 403...
        }
    });
    
    response.Wait();
}
catch (Exception ex)
{
    // Gérer les exceptions
}
    
request.Dispose();

Télécharger un fichier de Mes Fichiers ou Espace Collaboratif

Url de base : https://dl.transfertpro.com/download/myfile TransfertPro vous permet également de télécharger un fichier présent dans votre espace de stockage Mes Fichiers , ou dans un partage de l’Espace Collaboratif. L'appel à la méthode retourne un flux en lecture seule sur le fichier. Dans le cas où l’utilisateur courant n’est pas propriétaire du fichier (dossier partagé), il est impératif de fournir l’identifiant du partage en paramètre de la requête.

Paramètres :

Nom du paramètre Obligatoire Description Type
i Oui Id du fichier string
n Oui Nom du fichier string
s Non Id du partage. Nécessaire si le fichier se trouve dans un partage. string

Exemple d'appel


//Construction de l’url
var requestUrl = "https://dl.transfertpro.com/download/myfile?";
requestUrl += "i=" + fileToDownloadId;
requestUrl += "&n=" + fileToDownloadName;
requestUrl += "&s=" + fileToDownloadShareId;

//Instanciation de la requête
var request = new HttpRequestMessage(HttpMethod.Get, requestUrl);
    
try
{
//Envoi de la requête
    var response = GetHttpClient().SendAsync(request, HttpCompletionOption.ResponseHeadersRead).ContinueWith(task =>
    {
        var responseMessage = task.Result;
        if(responseMessage.IsSuccessStatusCode)
        {
            using (var responseStream = responseMessage.Content.ReadAsStreamAsync().Result)
            {
                // Lire le flux en lecture sur le fichier
            }
        }
        else
        {
            // Gérer les codes status 400, 401, 403...
        }
    });
    
    response.Wait();
}
catch (Exception ex)
{
    // Gérer les exceptions
}
    
request.Dispose();

Charger un fichier vers Mes Fichiers ou Espace Collaboratif

TransfertPro vous permet de charger un fichier vers Mes Fichiers ou vers l’Espace Collaboratif. Il y a deux étapes : La 1ere est de créer le brouillon du fichier permettant au système de savoir à l'avance quels sont les fichiers que nous allons envoyer puis dans un second temps, d'envoyer les données des fichiers.

Exemple d'appel pour la première étape si chargement vers Mes Fichiers

Référence : File/CreateDrafts

        //Construction de l’url
        var requestUrl = "https://ext.transfertpro.com/api/v5/File/CreateDrafts/";

        DraftFileDto file = new DraftFileDto();
        us.UploadId = Guid.NewGuid();
        us.FileName = "test.doc";
        us.FileSize = 1204;
        us.DirectoryId = "303180a3-7b28-41f8-9c5e-39b9952225e0";
        us.ModificationId = "";

        bool result = false;

        try
        {
            using (HttpResponseMessage response = GetHttpClient().PutAsJsonAsync(requestUrl, file).Result)
            {
                ProcessResponse(response,
                () => { result = true; },
                () =>
                {
                    log.WarnFormat("Impossible de créer le draft. Statut http : {0}", (int)response.StatusCode);
                    log.WarnFormat("  Contenu de la réponse : {0}", response.Content.ReadAsStringAsync().Result);
                });
            }
        }
        catch (AggregateException ex)
        {
            log.Error(string.Format("Impossible de créer le draft"), ex);
            //Utiliser cette erreur pour mettre le programme dans un statut "erreur réseau" afin de dire que le serveur n'est pas joignable.
            ThrowConnectionError();
        }
    

Exemple d'appel pour la première étape si envoi vers l'Espace Collaboratif

Référence : File/CreateDrafts2
    
        //Construction de l’url
        var requestUrl = "https://ext.transfertpro.com/api/v5/File/CreateDrafts/";


        DraftFileDto file = new DraftFileDto();
        us.UploadId = Guid.NewGuid();
        us.FileName = "test.doc";
        us.FileSize = 1204;
        us.DirectoryId = "303180a3-7b28-41f8-9c5e-39b9952225e0";
        us.ModificationId = "";

        var shareId = "3904fada-8d14-4d27-b0bd-c1a693b8603a";

        bool result = false;
        var suffixUrl = string.Format("share/{0}", shareId);

        try
        {
            using (HttpResponseMessage response = GetHttpClient().PutAsJsonAsync(requestUrl + suffixUrl, file).Result)
            {
                ProcessResponse(response,
                () => { result = true; },
                () =>
                {
                    log.WarnFormat("Impossible de créer le draft. Statut http : {0}", (int)response.StatusCode);
                    log.WarnFormat("  Contenu de la réponse : {0}", response.Content.ReadAsStringAsync().Result);
                });
            }
        }
        catch (AggregateException ex)
        {
            log.Error(string.Format("Impossible de créer le draft"), ex);
            //Utiliser cette erreur pour mettre le programme dans un statut "erreur réseau" afin de dire que le serveur n'est pas joignable.
            ThrowConnectionError();
        }
    

Exemple d'appel pour la deuxième étape


        //Construction de l’url
        var requestUrl = "http://up.transfertpro.com/Chunk";


        //L’upload de fichier se fait par chunk de 8Mo (8388608 octets). Ainsi un fichier faisant plus de 8 Mo devra appeler plusieurs fois cette requête en indiquant quel morceau est en cours d’upload.
        
        //Pour se faire, ces infos metadata sont passées en querystring (tous sont obligatoires):

        //- uid  [GUID] : l’identifiant d’upload du fichier. Définit précédemment comme UploadId
        //- name  [string] : le nom du fichier.
        //- chunk  [integer] : l’index du chunk en cours d’upload. Le premier chunk est l’index 0.
        //- chunks  [integer] (min = 1) : le nombre de chunks total de ce fichier.
        //- share  [GUID] : l'identifiant du partage
        //- offset  [integer] : l’index du nombres d'octets envoyés. Lors du premier envoi de chunk 0. 
        //- overwrite  [booleen] : true / false - définit si on écrase le fichier
        //- sender  [string] : nom d'utilisateur de l'emetteur
        //- Dans le cas de l’utilisation d’un mot de passe pour chiffrer le fichier, il devra aussi être passé dans le corps de la requête avec la clé shadow.
        
        
        HttpResponseMessage response = null;
        try
        {
            //using (HttpResponseMessage response = GetHttpClient().PutAsJsonAsync(requestUrl, file).Result)
            using (var content = new MultipartFormDataContent())
            {
                string queryString = string.Format("?uid={0}&name={1}&chunk={2}&chunks={3}&share={4}&offset={5}&o={6}&sender={7}",
                        fileId,
                        Uri.EscapeDataString(fileName),
                        chunkIndex,
                        chunkTotal,
                        0,
                        rangeStart,
                        true,
                        username);

                var fileContent = new ByteArrayContent(fileContentBuffer);

                content.Add(fileContent);
                if (!string.IsNullOrEmpty(shadow))
                    content.Add(new StringContent(shadow));

                response = GetHttpClient().PostAsync("/Chunk" + queryString, content).Result;
                if (response.IsSuccessStatusCode)
                    isUploaded = true;
                else
                    // Gérer les erreurs
            }
        }
        catch (Exception ex)
        {
            // Gérer les erreurs
        }

    

Connaitre le nombre de fichiers non téléchargés contenus dans la boite de réception

TransfertPro vous permet de récupérer le nombre de fichiers présents dans la boite de reception de l'utilisateur courant qui n'ont jamais été téléchargés. Seuls les fichiers respectant les critères suivants sont comptabilisés :
  • Le fichier doit être en ligne.
  • Si le workflow de validation est actif pour la société de l'utilisateur courant, le fichier doit être validé.
Référence : Inbox/GetNotDownloadedFilesNumber Exemple :

try
{
    var request = createRequest("https://ext.transfertpro.com/api/v5/Inbox/NotDownloadedFilesNumber", "application/json", HttpMethod.Get);
    
    using (HttpResponseMessage response = GetHttpClient().SendAsync(request).Result)
    {
        if(response.IsSuccessStatusCode)
        {
            var data = JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result);
            int fileNumber = data.Count;
        }
        else
        {
            // Gérer les codes status 400, 401, 403...
        }
    }
    
    request.Dispose();
}
catch (Exception ex)
{
    // Gérer les exceptions
}

Copier un fichier de la boite de réception

Dans le cas où le fichier a été envoyé à l'utilisateur avec l'option 'Shadow' d'activée, il est impératif de fournir le mot de passe dans le modèle de la requête. Par défaut la copie n'écrase pas la destination si un fichier du même nom existe déja. Si un fichier existe déja une exception est levée. Pour indiquer à TransfertPro d'écraser le fichier, passez la propriété overwrite du modèle à true Une exception est levée si l'id du fichier source ne correspond pas à un fichier dans TransfertPro. Une exception est également levée si l'id du dossier de destination ne correspond pas à un dossier dans TransfertPro.

Vers l’espace de travail

Référence : Inbox/CopyToWorkspace Codes d'erreur :
  • 400L'id du fichier source est manquant ou l'id du partage cible est manquant ou l'id du dossier parent cible est manquant.
  • 401L'utilisateur ne possède pas les droits necessaires sur le partage pour exécuté cette opération. Le fichier spécifié ne correspond pas à un fichier de la boite de reception de l'utilisateur
  • 404Le fichier source est introuvable ou le partage cible est introuvable ou le dossier parent cible est introuvable ou le dossier parent cible ne fait pas parti du partage.
Exemple :

try
{        
    string url = string.Format("https://ext.transfertpro.com/api/v5/Inbox/{0}/CopyToWorkspace", fileToCopyToWorkspaceId);
    var model = new { targetParentDirectoryId = folderToCopyTargetId };
    
    using (HttpResponseMessage response = GetHttpClient().PutAsJsonAsync("https://ext.transfertpro.com/api/v5/Inbox/CopyToWorkspace", model).Result)
    {
        if(response.IsSuccessStatusCode)
        {
            // Copie effectuée avec succès.
        }
        else
        {
            // Gérer les codes status 400, 401, 403...
        }
    }
    
    request.Dispose();
}
catch (Exception ex)
{
    // Gérer les exceptions
}

Rechercher des fichiers dans la boite de réception

TransfertPro vous permet de rechercher des fichiers dans la boite de reception de l'utilisateur courant. Seuls les fichiers respectant les critères suivants sont retournés :
  • Le fichier doit être en ligne.
La recherche est insensible à la casse. Référence : Inbox/Search Codes d'erreur :
  • 400Le texte à rechercher est manquant.
Exemple :

try
{  
    string searchText; // Texte à rechercher dans le nom du fichier.
    var url = string.Format("https://ext.transfertpro.com/api/v5/Inbox/Search/{0}", searchText);
    var request = createRequest(url, "application/json", HttpMethod.Get);
    using (HttpResponseMessage response = GetHttpClient().SendAsync(request).Result)
    {
        if(response.IsSuccessStatusCode)
        {
            // Recherche effectuée avec succès.
            List datas = (List)JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result, typeof(List));
        }
        else
        {
            // Gérer les codes status 400, 401, 403...
        }
    }
    request.Dispose();
}
catch (Exception ex)
{
    // Gérer les exceptions
}