Zum Hauptinhalt springen
In diesem Abschnitt finden Sie die folgenden Beispiele für POST-Anfragen für die Arbeit mit Dateien: Dateien vom Server laden Dateien auf den Server hochladen Eine Prüfsumme abrufen Laden in Teilen (Ändern einer vorhandenen Datei)

Dateien vom Server laden

Um eine Datei vom Server zu laden, sollte eine Serveranfrage erstellt werden (AppServerURL + “/FlexiCapture12/Server/FileService/v1”). Die Request-Methode sollte POST sein, und der Inhalt sollte vom Typ application/x-www-form-urlencoded sein. Die Ergebnisse sollten in einer neuen Datei gespeichert werden. Request-Body:
"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
            {
                // Anfrage erstellen
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
                request.Method = "POST";
                // Authentifizierung beim Verbinden mit dem Webservice einrichten
                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();                  
           
                // Antwort empfangen
                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;
        }

Dateien auf den Server hochladen

Sie müssen eine vorhandene Datei öffnen und Daten daraus lesen (die Zeichenfolge „content“ sollte mit Encoding.Default aus der Binärdatei abgerufen werden). Zum Speichern der Datei sollte eine Serveranfrage erstellt werden (AppServerURL + “/FlexiCapture12/Server/FileService/v1”). Die Request-Methode sollte POST sein, und der Inhalt sollte vom Typ multipart/form-data sein. Request-Body:
"\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 +            // Name des binären Streams in 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"+                                       // der Wert des filename-Parameters hat keinen Einfluss auf den Request selbst
content +                                                                        //Daten, die auf den Server hochgeladen werden
"\r\n--" + requestId + "--\r\n";
static private CredentialCache basicAuthenticationCredentialCache = null;
// der „content"-String sollte mithilfe von Encoding.Default aus der Binärdatei gewonnen werden
        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
            {
                // Request erstellen
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
                request.Method = "POST";
                // Authentifizierung beim Verbinden mit dem Webservice einrichten
                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();  
                // Antwort empfangen
                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;
        }

Abrufen einer Prüfsumme

Um eine Prüfsumme abzurufen, sollte eine Serveranfrage erstellt werden (AppServerURL + “/FlexiCapture12/Server/FileService/v1”). Die Request-Methode sollte POST sein, und der Inhaltstyp sollte application/x-www-form-urlencoded sein. Request-Body:
"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
            {
                // Anfrage erstellen
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
                request.Method = "POST";
                // Authentifizierung beim Verbinden mit dem Webservice einrichten
    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();
                // Antwort empfangen
    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;
  }

Laden in Teilen (Ändern einer vorhandenen Datei)

Wichtig! Nur eine Datei, die bereits auf dem Server vorhanden ist, kann geändert werden. Um die Datei zu ändern, muss eine Serveranfrage erstellt werden (AppServerURL + “/FlexiCapture12/Server/FileService/v1”). Die Request-Methode muss POST sein, und der Inhalt muss vom Typ multipart/form-data sein. Request-Body:
"\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 +                                                                                                                              //dieser String sollte auf die gleiche Weise wie im vorherigen Beispiel ermittelt werden
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"offset\"\r\n\r\n" + offset +            //der Offset vom Anfang der Datei, an dem der Eintrag beginnt
"\r\n--" + requestId + "--\r\n";
static private CredentialCache basicAuthenticationCredentialCache = null;
// Der String "content" sollte mithilfe von Encoding.Default aus der Binärdatei ermittelt werden
        // Hinweis: Es können nur Daten an eine bereits vorhandene Datei angehängt werden, d. h. die Datei muss zunächst mit der Methode POSTSaveFile erstellt werden
        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
            {
                // Anfrage erstellen
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
                request.Method = "POST";
                // Authentifizierung für die Verbindung mit dem Webservice einrichten
                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();
                // Antwort empfangen
                response = (HttpWebResponse)request.GetResponse();
                responseStream = response.GetResponseStream();
                // Antwort anzeigen
                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;
        }