Отправка HTTP Post Запрос на обновление содержимого файла с использованием C ++ REST SDK Casablanca -- c++ поле с участием rest поле с участием alfresco поле с участием casablanca пол Связанный проблема

Sending a HTTP POST request for updating file contents using C++ REST SDK Casablanca


3
vote

проблема

русский

Я пытаюсь обновить содержимое файла на сервере Alfresco, используя C ++ SDK SDK. Я использую URL Alfresco CMIS URL для отправки запроса. Быть более конкретным, это Browser Olfres alfresco Cmis Binding. Я должен придерживаться браузера, связывающей не атом.

Когда я отправляю запрос, он всегда обновляет версию файла, а не содержимое. Я посылаю содержимое в запросе Body. Below мой код

 <код> void UpdateFileContent() {   concurrency::streams::basic_istream<unsigned char> fileStream = file_stream<unsigned char>::open_istream("C:DesktopSample.txt").get();    concurrency::streams::stringstreambuf streamBuffer;   fileStream.read_to_end(streamBuffer).get();   std::string textFile = move(streamBuffer.collection());   fileStream.close();   streamBuffer.close();   std::string textBoundary = "--FORMBOUNDARY--";   std::string textBody = "";   textBody += "--" + textBoundary + "  ";   textBody += "Content-Disposition:form-data;name=Sample;filename=Sample  ";   textBody += "Content-Type: application/octet-stream    ";   textBody +=textFile+"  ";   textBody += "--" + textBoundary + "--  ";   web::uri_builder builder(U("http://Alfresco-Server:8080/alfresco/api/-default-/public/cmis/versions/1.1/browser/root/Sites/"));   builder.append_path(U("siteName/documentLibrary/FolderName/Sample3.doc"));   builder.append_query(U("alf_ticket"),ticket);   builder.append_query(U("cmisaction"),U("update"));   builder.append_query(U("propertyId[0]"),U("cmis:name"));   builder.append_query(U("propertyValue[0]"),U("SampleFileUpdate"));   http_client client(builder.to_string());   http_request req;   req.set_method(methods::POST);   req.headers().set_content_type(L"multipart/form-data;boundary=--FORMBOUNDARY--");   req.headers().set_content_length(textBody.length());   req.set_body(textBody);   http_response response = client.request(req).get();   std::cout<<response.status_code(); }   

Один и тот же код работает для загрузки нового файла, если я изменим Cmisaction для создания. Пожалуйста, дайте мне решение обновить содержимое файла, проживающего в Alfresco через C ++ REST SDK

Английский оригинал

I am trying to update the contents of a file in alfresco server using C++ rest sdk. I am using the alfresco CMIS url to send the request.To be more specific it is Alfresco CMIS browser binding.I have to stick to browser binding not atom binding.

When I send the request it always updates the version of the file not the contents. I am sending the contents in the request body.Below is my code

void UpdateFileContent() {   concurrency::streams::basic_istream<unsigned char> fileStream = file_stream<unsigned char>::open_istream("C:DesktopSample.txt").get();    concurrency::streams::stringstreambuf streamBuffer;   fileStream.read_to_end(streamBuffer).get();   std::string textFile = move(streamBuffer.collection());   fileStream.close();   streamBuffer.close();   std::string textBoundary = "--FORMBOUNDARY--";   std::string textBody = "";   textBody += "--" + textBoundary + "  ";   textBody += "Content-Disposition:form-data;name=Sample;filename=Sample  ";   textBody += "Content-Type: application/octet-stream    ";   textBody +=textFile+"  ";   textBody += "--" + textBoundary + "--  ";   web::uri_builder builder(U("http://Alfresco-Server:8080/alfresco/api/-default-/public/cmis/versions/1.1/browser/root/Sites/"));   builder.append_path(U("siteName/documentLibrary/FolderName/Sample3.doc"));   builder.append_query(U("alf_ticket"),ticket);   builder.append_query(U("cmisaction"),U("update"));   builder.append_query(U("propertyId[0]"),U("cmis:name"));   builder.append_query(U("propertyValue[0]"),U("SampleFileUpdate"));   http_client client(builder.to_string());   http_request req;   req.set_method(methods::POST);   req.headers().set_content_type(L"multipart/form-data;boundary=--FORMBOUNDARY--");   req.headers().set_content_length(textBody.length());   req.set_body(textBody);   http_response response = client.request(req).get();   std::cout<<response.status_code(); } 

The same code works for uploading a new file if I change the cmisaction to createDocument. Please give me a solution to update the contents of a file residing in alfresco throught C++ rest SDK

</div
           

Список ответов

1
 
vote

Это может помочь вам ..

 <код> std::string CMISRESTMETHOD:: UpdateFile(std::string ticket,std::string hostName,std::string portNum,std::string updateFilepath,std::string ClientpathtoDocument,bool ismajorVersion) {     try     {         if(ticket.empty())         {             throw std::runtime_error("Please pass the authentication ticket");         }         else if(hostName.empty())         {             throw std::runtime_error("Please pass the hostName");          }         else         {         ReplaceStringInPlace(updateFilepath," ","%20");         Concurrency::streams::basic_istream<unsigned char> fileStream =Concurrency::streams::file_stream<unsigned char>::open_istream(utility::conversions::to_string_t(ClientpathtoDocument)).get();         // Read file stream to string         concurrency::streams::stringstreambuf streamBuffer;         fileStream.read_to_end(streamBuffer).get();         std::string textFile = move(streamBuffer.collection());         fileStream.close();         streamBuffer.close();         std::string url="http://"+hostName+":"+portNum+"/alfresco/api/-default-/public/cmis/versions/1.1/browser/root";         string_t objectId=getProperties(updateFilepath,conversions::to_string_t(ticket),"cmis:objectId",url);         if(!objectId.empty())         {             int findPos=objectId.find(';');             string_t objectID=objectId.substr(1,findPos-1);             string_t majorVersion=L"false";             if(ismajorVersion)             {                 majorVersion=L"true";             }              std::string atomUrl="http://"+hostName+":"+portNum+"/alfresco/api/-default-/public/cmis/versions/1.1/atom";             web::uri_builder builder(conversions::to_string_t(atomUrl));             builder.append_path(U("/content/id"));             builder.append_query(U("alf_ticket"),conversions::to_string_t(ticket));             builder.append_query(L"id",objectID);             builder.append_query(L"major",majorVersion);             http_client client(builder.to_string());             http_request req;             req.set_method(methods::PUT);             req.set_body(textFile);             req.headers().set_content_length(textFile.length());             http_response res=client.request(req).get();             if(res.status_code()!=201 && res.status_code()!=200)             {             throw std::runtime_error(getStatusCodeInfo(res.status_code()));             }             return getStatusCodeInfo(res.status_code());         }         else         {             throw std::runtime_error("The requested document property is not available.Could not update the document");         }         }     }     catch(std::exception &ex)     {         throw std::runtime_error(ex.what());     } }   
 

This might help you..

std::string CMISRESTMETHOD:: UpdateFile(std::string ticket,std::string hostName,std::string portNum,std::string updateFilepath,std::string ClientpathtoDocument,bool ismajorVersion) {     try     {         if(ticket.empty())         {             throw std::runtime_error("Please pass the authentication ticket");         }         else if(hostName.empty())         {             throw std::runtime_error("Please pass the hostName");          }         else         {         ReplaceStringInPlace(updateFilepath," ","%20");         Concurrency::streams::basic_istream<unsigned char> fileStream =Concurrency::streams::file_stream<unsigned char>::open_istream(utility::conversions::to_string_t(ClientpathtoDocument)).get();         // Read file stream to string         concurrency::streams::stringstreambuf streamBuffer;         fileStream.read_to_end(streamBuffer).get();         std::string textFile = move(streamBuffer.collection());         fileStream.close();         streamBuffer.close();         std::string url="http://"+hostName+":"+portNum+"/alfresco/api/-default-/public/cmis/versions/1.1/browser/root";         string_t objectId=getProperties(updateFilepath,conversions::to_string_t(ticket),"cmis:objectId",url);         if(!objectId.empty())         {             int findPos=objectId.find(';');             string_t objectID=objectId.substr(1,findPos-1);             string_t majorVersion=L"false";             if(ismajorVersion)             {                 majorVersion=L"true";             }              std::string atomUrl="http://"+hostName+":"+portNum+"/alfresco/api/-default-/public/cmis/versions/1.1/atom";             web::uri_builder builder(conversions::to_string_t(atomUrl));             builder.append_path(U("/content/id"));             builder.append_query(U("alf_ticket"),conversions::to_string_t(ticket));             builder.append_query(L"id",objectID);             builder.append_query(L"major",majorVersion);             http_client client(builder.to_string());             http_request req;             req.set_method(methods::PUT);             req.set_body(textFile);             req.headers().set_content_length(textFile.length());             http_response res=client.request(req).get();             if(res.status_code()!=201 && res.status_code()!=200)             {             throw std::runtime_error(getStatusCodeInfo(res.status_code()));             }             return getStatusCodeInfo(res.status_code());         }         else         {             throw std::runtime_error("The requested document property is not available.Could not update the document");         }         }     }     catch(std::exception &ex)     {         throw std::runtime_error(ex.what());     } } 
</div
 
 

Связанный проблема

0  Правильный способ использования вариационного шаблона функции вызова со строковыми аргументами C ++  ( Proper way of using variadic template function call with string arguments c ) 
Здравствуйте, что не то, что я здесь делаю, используя вариадические шаблоны через строку? Как правильно использовать его для достижения заданий ниже? <код> ...

-4  Петля, которая компилирует и работает в INT основной функции не скомпилируется при введении в отдельную функцию [закрыто]  ( Loop that compiles and runs in int main function wont compile when put into a se ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыто. Этот вопрос нуждается в Детали отладки . В настоящее вр...

0  Как захватывать события, выпущенные из нового окна всплывающего  ( How to capture events fired from new popup ie window ) 
Приветствия! <Сильная> Ситуация: My ActiveX DLL содержит индивидуальный webbrowser. WebBrowser отображает веб-страницу. Когда пользователь нажимает на сс...

0  Как настроить VS2008 для эффективного развития C ++  ( How to setup vs2008 for efficient c development ) 
Обычно I Программируйте в C #, но были вынуждены выполнять работу в C ++. Похоже, что интеграция с Visual Studio (2008) действительно плохо по сравнению с C #...

3  Как создавать закрытые зоны (выпуклые многоугольники) от набора сегментов линии?  ( How to create closed areas convex polygons from set of line segments ) 
Следующая проблема находится в 2D, поэтому некоторые упрощения могут быть сделаны при предложении ответов. Мне нужно создать закрытые области (определены ли...

-1  Приложение C ++ в массивах с использованием арифметического указателя  ( C app on arrays using pointer arithmetic ) 
Вопрос: как я могу генерировать случайное животное из массива, используя эту функцию? <код> const int MAX =12; //12 animals const int MAXSTR = 10; ...

-1  Бросить исключение, когда неправильный тип введен в  ( Throw exception when a wrong type is keyed in ) 
Я должен написать программу C ++, в которой функция состоит в том, чтобы прочитать два номера double Тип чисел из клавиатуры и добавить <код> try BLOCK, чт...

57  Как сделать макрос C ++ вести себя как функция?  ( How do i make a c macro behave like a function ) 
Допустим, по какой-то причине вам нужно написать макрос: <код> MACRO(X,Y) . (давайте предположим, что есть веская причина, по которой вы не можете использова...

1  Шаблон статических классов через динамические связанные библиотеки  ( Template static classes across dynamic linked libraries ) 
У меня есть классовый класс со статическим значением, как это: <код> template <class TYPE> class A{ static TYPE value; }; в коде dll I назначаю ст...

14  Классы, Rvalues ​​и Rvalue Список  ( Classes rvalues and rvalue references ) 
Lvalue - это значение, связанное с окончательной областью памяти, тогда как rvalue - это значение выражения, существование которого является временным, а не о...

5  Что такое "для (x: y)"?  ( What is for x y ) 
Итак, я оглянулся на межпубки о нитках, и я пришел в блог / учебную вещь о нитках, но то, что меня смущено, была эта линия, которую он использовал <код> for...

2  Создание хеша для данных больше, чем память (без зарядки)  ( Generating a hash for data larger than memory without getting arrested ) 
Добрый послеобеденный переполнец! ;) Что я хочу сделать: Я заинтересован в проверке передаваемой целостности файлов. Как я подошел к нему: Я рассм...

501  Как использовать постоянную PI в C ++  ( How to use the pi constant in c ) 
Я хочу использовать постоянные и тригонометрические функции PI в некоторой программе C ++. Я получаю тригонометрические функции с помощью <код> include <math....

-1  C ++ DO В то время как проблемы с петлей [закрыто]  ( C do while loop issues ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> <Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 ...

6  Singleton & Multi-Threading  ( Singleton multi threading ) 
У меня есть следующий класс <код> class Singleton { private: static Singleton *p_inst; Singleton(); public: static Singleton * instance()...

Связанный проблема

0  Правильный способ использования вариационного шаблона функции вызова со строковыми аргументами C ++ 
-4  Петля, которая компилирует и работает в INT основной функции не скомпилируется при введении в отдельную функцию [закрыто] 
0  Как захватывать события, выпущенные из нового окна всплывающего 
0  Как настроить VS2008 для эффективного развития C ++ 
3  Как создавать закрытые зоны (выпуклые многоугольники) от набора сегментов линии? 
-1  Приложение C ++ в массивах с использованием арифметического указателя 
-1  Бросить исключение, когда неправильный тип введен в 
57  Как сделать макрос C ++ вести себя как функция? 
1  Шаблон статических классов через динамические связанные библиотеки 
14  Классы, Rvalues ​​и Rvalue Список 
5  Что такое "для (x: y)"? 
2  Создание хеша для данных больше, чем память (без зарядки) 
501  Как использовать постоянную PI в C ++ 
-1  C ++ DO В то время как проблемы с петлей [закрыто] 
6  Singleton & Multi-Threading 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.