Russian (Русский) - Change language

Примеры

В данном разделе приведены следующие примеры использования POST-запросов для работы с файлами:

Загрузка файла с сервера

Сохранение файла на сервере

Получение контрольной суммы

Загрузка по частям (изменение существующего файла)

Загрузка файла с сервера

Для загрузки файла необходимо сформировать запрос на сервер (AppServerURL + "/FlexiCapture12/Server/FileService/v1"). Метод запроса – POST, тип содержимого – application/x-www-form-urlencoded. Результат должен быть записан в новый файл.

Тело запроса:

"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
            {
                // формирование запроса
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
                request.Method = "POST";
                // работа с аутентификацией, заданной при подключении к веб-сервису
                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();                  
           
                // получение ответа
                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;
        }
    

Сохранение файла на сервере

Необходимо открыть существующий файл и прочитать из него данные (строка "content" должна быть получена из бинарного файла с помощью Encoding.Default).

Для сохранения файла необходимо сформировать запрос на сервер (AppServerURL + "/FlexiCapture12/Server/FileService/v1"). Метод запроса – POST, тип содержимого – multipart/form-data.

Тело запроса:

"\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 +            // имя бинарного потока в 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"+                                       // параметр filename является формальным, его значение не влияет на выполнение запроса
content +                                                                        //данные, которые загружаются на сервер
"\r\n--" + requestId + "--\r\n";
 
static private CredentialCache basicAuthenticationCredentialCache = null;
// строка "content" должна быть получена из бинарного файла с помощью 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
            {
                // формирование запроса
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
                request.Method = "POST";
                // работа с аутентификацией, заданной при подключении к веб-сервису
                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();  
 
                // получение ответа
                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;
        }
    

Получение контрольной суммы

Для получения контрольной суммы необходимо сформировать запрос на сервер (AppServerURL + "/FlexiCapture12/Server/FileService/v1"). Метод запроса – POST, тип содержимого – application/x-www-form-urlencoded.

Тело запроса:

"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
            {
                // формирование запроса
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
                request.Method = "POST";
                // работа с аутентификацией, заданной при подключении к веб-сервису
    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();
 
                // получение ответа
    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;
  }
    

Загрузка по частям (изменение существующего файла)

Внимание! Изменять можно только уже существующий на сервере файл.

Для изменения файла необходимо сформировать запрос на сервер (AppServerURL + "/FlexiCapture12/Server/FileService/v1"). Метод запроса – POST, тип содержимого – multipart/form-data.

Тело запроса:

"\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" +
сontent +                                                                                                                              //строка должна быть получена так же, как и в предыдущем пункте
"\r\n--" + requestId + "\r\ncontent-disposition: form-data; name=\"offset\"\r\n\r\n" + offset +            //сдвиг от начала файла, откуда начинается запись
"\r\n--" + requestId + "--\r\n";
 
static private CredentialCache basicAuthenticationCredentialCache = null;
// строка content должна быть получена из бинарного файла с помощью Encoding.Default
        // важно: добавлять можно только в уже созданный файл, т.е. сначала нужно создать файл методом 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
            {
                // формирование запроса
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(AppServerURL + "/FlexiCapture12/Server/FileService/v1");
                request.Method = "POST";
                // работа с аутентификацией, заданной при подключении к веб-сервису
                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();
 
                // получение ответа
                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;
        }
  

11/10/2020 12:08:08 PM


Please leave your feedback about this article