Passer au contenu principal
Dans cette section, vous trouverez les exemples suivants de requête POST pour manipuler des fichiers : Chargement de fichiers depuis le serveur Téléversement de fichiers vers le serveur Récupération d’une somme de contrôle Chargement en plusieurs parties (modification d’un fichier existant)

chargement de fichiers depuis le serveur

Pour charger un fichier à partir du serveur, il faut créer une requête au serveur (AppServerURL + “/FlexiCapture12/Server/FileService/v1”). La méthode de la requête doit être POST, et le contenu doit être de type application/x-www-form-urlencoded. Le résultat doit être enregistré dans un nouveau fichier. Corps de la requête :
"Action=Load" +"&sessionId=" + session + "&objectType=" + objectType + "&projectId=" + projectId + "&batchId=" + batchId + "&objectId=" + objectId + "&version=" + version + "&streamName=" + streamName
static private CredentialCache basicAuthenticationCredentialCache = null;
public static List<byte> POSTLoadFile(string AppServerURL, int session, int projectId, int batchId, int objectType, int objectId, int version, int parentId, string streamName)
       {
            List<byte> result = new List<byte>();
            HttpWebResponse response = null;
            Stream responseStream = null;
            BinaryReader reader = null;
            try
            {
                // création de la requête
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
                request.Method = "POST";
                // configuration de l'authentification lors de la connexion au service web
                if (basicAuthenticationCredentialCache != null)
                {
                    request.Credentials = basicAuthenticationCredentialCache;
                }
                else
                {
                    request.UseDefaultCredentials = true;
                }
                request.ContentType = "application/x-www-form-urlencoded";
                string postData = "Action=Load" +
                    "&sessionId=" + session +
                    "&objectType=" + objectType +
                    "&projectId=" + projectId +
                    "&batchId=" + batchId +
                    "&parentId=" + parentId +
                    "&objectId=" + objectId +
                    "&version=" + version +
                    "&streamName=" + streamName;
                StreamWriter writer = new StreamWriter(request.GetRequestStream());
                writer.Write(postData);
                writer.Close();                  
           
                // réception d'une réponse
                response = (HttpWebResponse)request.GetResponse();
                responseStream = response.GetResponseStream();
                reader = new BinaryReader(responseStream);
                int responseStreamLength = 0;
                while (true)
                {
                    try
                    {
                        result.Add(reader.ReadByte());
                        responseStreamLength++;
                    }
                    catch (EndOfStreamException)
                    {
                        break;
                    }
                }
                reader.Close();
                responseStream.Close();
                response.Close();               
            }
            if (response != null) response.Close();
            if (responseStream != null) responseStream.Close();
            if (reader != null) reader.Close();
            return result;
        }

Téléversement de fichiers vers le serveur

Vous devez ouvrir un fichier existant et en lire les données (la chaîne « content » doit être obtenue à partir du fichier binaire à l’aide de Encoding.Default). Pour enregistrer le fichier, vous devez créer une requête au serveur (AppServerURL + “/FlexiCapture12/Server/FileService/v1”). La méthode de la requête doit être POST, et le contenu doit être de type multipart/form-data. Corps de la requête :
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"Action\"\r\n\r\nSave" +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectType\"\r\n\r\n" + objectType +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"sessionId\"\r\n\r\n" + session +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"projectId\"\r\n\r\n" + projectId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"batchId\"\r\n\r\n" + batchId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectId\"\r\n\r\n" + objectId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"version\"\r\n\r\n" + version +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"streamName\"\r\n\r\n" + streamNameInBase64 +            // nom du flux binaire en Base64
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"blob\";filename=\"filename.txt\"\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n\r\n"+                                       // la valeur du paramètre filename n'affecte pas la requête elle-même
content +                                                                        //données téléversées vers le serveur
"\r\n--" + requestId + "--\r\n";
static private CredentialCache basicAuthenticationCredentialCache = null;
// la chaîne "content" doit être obtenue à partir du fichier binaire via Encoding.Default
        public static List<byte> POSTSaveFile(string AppServerURL, int session, int projectId, int batchId, int objectType, int objectId, int version, string streamName, string content)
        {
            List<byte> result = new List<byte>();
            HttpWebResponse response = null;
            Stream responseStream = null;
            StreamReader reader = null;
            int requestId = Environment.TickCount;
            try
            {
                // création de la requête
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
                request.Method = "POST";
                // configuration de l'authentification pour la connexion au service web
                if (basicAuthenticationCredentialCache != null)
                {
                    request.Credentials = basicAuthenticationCredentialCache;
                }
                else
                {
                    request.UseDefaultCredentials = true;
                }
                request.ContentType = "multipart/form-data, boundary=" + requestId;
                byte[] streamNameInBytes = Encoding.Unicode.GetBytes(streamName);
                UnicodeEncoding UTFencofing = new UnicodeEncoding();
                string postData = "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"Action\"\r\n\r\nSave" +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectType\"\r\n\r\n" + objectType +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"sessionId\"\r\n\r\n" + session +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"projectId\"\r\n\r\n" + projectId +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"batchId\"\r\n\r\n" + batchId +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectId\"\r\n\r\n" + objectId +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"version\"\r\n\r\n" + version +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"streamName\"\r\n\r\n" + Convert.ToBase64String(streamNameInBytes) +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"blob\";filename=\"filename.txt\"\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n\r\n";
                postData += content;
                postData += "\r\n--" + requestId + "--\r\n";
                StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.Default);
                writer.Write(postData);
                writer.Close();  
                // réception de la réponse
                response = (HttpWebResponse)request.GetResponse();
                responseStream = response.GetResponseStream(); 
                reader = new StreamReader(responseStream);
                reader.Close();
                responseStream.Close();
                response.Close();
            }
            if (response != null) response.Close();
            if (responseStream != null) responseStream.Close();
            if (reader != null) reader.Close();
            return result;
        }

Obtention d’une somme de contrôle

Pour obtenir une somme de contrôle, il faut créer une requête au serveur (AppServerURL + “/FlexiCapture12/Server/FileService/v1”). La méthode de la requête doit être POST, et le corps doit être de type application/x-www-form-urlencoded. Corps de la requête :
"Action=Checksum" + "&sessionId=" + session + "&objectType=" + objectType + "&projectId=" + projectId + "&batchId=" + batchId + "&objectId=" + objectId + "&version=" + version + "&streamName=" + streamName
static private CredentialCache basicAuthenticationCredentialCache = null;
public static List<byte> POSTGetChecksum(string AppServerURL, int session, int projectId, int batchId, int objectType, int objectId, int version, string streamName)
        {
   List<byte> result = new List<byte>();
   HttpWebResponse response = null;
   Stream responseStream = null;
   BinaryReader reader = null;
   try
            {
                // création de la requête
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
                request.Method = "POST";
                // configuration de l'authentification lors de la connexion au service web
    if (basicAuthenticationCredentialCache != null)
    {
     request.Credentials = basicAuthenticationCredentialCache;
    }
    else
    {
     request.UseDefaultCredentials = true;
    }
    request.ContentType = "application/x-www-form-urlencoded";
    string postData = "Action=Checksum" +
     "&sessionId=" + session +
     "&objectType=" + objectType +
     "&projectId=" + projectId +
     "&batchId=" + batchId +
     "&objectId=" + objectId +
     "&version=" + version +
     "&streamName=" + streamName;
    StreamWriter writer = new StreamWriter(request.GetRequestStream());
    writer.Write(postData);
    writer.Close();
                // réception d'une réponse
    response = (HttpWebResponse)request.GetResponse();
    responseStream = response.GetResponseStream();
    reader = new BinaryReader(responseStream);
    int responseStreamLength = 0;
    while (true)
    {
     try
     {
      result.Add(reader.ReadByte());
      responseStreamLength++;
     }
     catch (EndOfStreamException)
     {
      break;
     }
    }
    reader.Close();
    responseStream.Close();
    response.Close();
   }
   if (response != null) response.Close();
   if (responseStream != null) responseStream.Close();
   if (reader != null) reader.Close();
   return result;
  }

Chargement en plusieurs parties (modification d’un fichier existant)

Seul un fichier existant déjà sur le serveur peut être modifié.
Pour modifier le fichier, une requête au serveur doit être créée (AppServerURL + “/FlexiCapture12/Server/FileService/v1”). La méthode de requête doit être POST, et le contenu doit être au format multipart/form-data. Corps de la requête :
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"Action\"\r\n\r\nAppend" +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectType\"\r\n\r\n" + objectType +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"sessionId\"\r\n\r\n" + session +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"projectId\"\r\n\r\n" + projectId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"batchId\"\r\n\r\n" + batchId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectId\"\r\n\r\n" + objectId +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"version\"\r\n\r\n" + version +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"streamName\"\r\n\r\n" + streamNameInBase64 +
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"blob\";filename=\"filename.txt\"\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n\r\n" +
content +                                                                                                                              //cette chaîne doit être obtenue de la même manière que dans l'exemple précédent
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"offset\"\r\n\r\n" + offset +            //le décalage depuis le début du fichier, là où l'entrée commence
"\r\n--" + requestId + "--\r\n";
static private CredentialCache basicAuthenticationCredentialCache = null;
// la chaîne "content" doit être obtenue à partir du fichier binaire en utilisant Encoding.Default
        // Remarque : vous ne pouvez ajouter des données qu'à un fichier existant ; vous devez donc d'abord créer un fichier à l'aide de la méthode POSTSaveFile
        public static List<byte> POSTAppendFile(string AppServerURL, int session, int projectId, int batchId, int objectType, int objectId, int version, string streamName, string content, int offset)
        {
            List<byte> result = new List<byte>();
            HttpWebResponse response = null;
            Stream responseStream = null;
            StreamReader reader = null;
            int requestId = Environment.TickCount;
            try
            {
                // création d'une requête
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
                request.Method = "POST";
                // configuration de l'authentification lors de la connexion au service web
                if (basicAuthenticationCredentialCache != null)
                {
                    request.Credentials = basicAuthenticationCredentialCache;
                }
                else
                {
                    request.UseDefaultCredentials = true;
                }
                request.ContentType = "multipart/form-data, boundary=" + requestId;
                byte[] streamNameInBytes = Encoding.Unicode.GetBytes(streamName);
                UnicodeEncoding UTFencofing = new UnicodeEncoding();
                string postData = "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"Action\"\r\n\r\nAppend" +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectType\"\r\n\r\n" + objectType +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"sessionId\"\r\n\r\n" + session +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"projectId\"\r\n\r\n" + projectId +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"batchId\"\r\n\r\n" + batchId +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"objectId\"\r\n\r\n" + objectId +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"version\"\r\n\r\n" + version +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"streamName\"\r\n\r\n" + Convert.ToBase64String(streamNameInBytes) +
                    "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"blob\";filename=\"filename.txt\"\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n\r\n";
                postData += content;
                postData += "\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"offset\"\r\n\r\n" + offset;
                postData += "\r\n--" + requestId + "--\r\n";
                StreamWriter writer = new StreamWriter(request.GetRequestStream(), Encoding.Default);
                writer.Write(postData);
                writer.Close();
                // réception d'une réponse
                response = (HttpWebResponse)request.GetResponse();
                responseStream = response.GetResponseStream();
                // affichage de la réponse
                reader = new StreamReader(responseStream); 
                reader.Close();
                responseStream.Close();
                response.Close();
            }
            if (response != null) response.Close();
            if (responseStream != null) responseStream.Close();
            if (reader != null) reader.Close();
            return result;
        }