Как я могу добавить новый документ в Content Server 10.5 с помощью REST API

Как добавить новый документ в Content Server 10.5 с помощью REST API?

Я следую Swagger docs для создания узла, но непонятно, как прикрепить файл к запросу. Вот (примерно) код, который я использую:

var folderId = 2000;
var docName = "test";

var uri = $"http://[serverName]/otcs/llisapi.dll/api/v1/nodes?type=144&parent_id={folderId}&name={docName}";    

var request = new HttpRequestMessage();
request.Headers.Add("Connection", new[] { "Keep-Alive" });
request.Headers.Add("Cache-Control", "no-cache, no-store, must-revalidate"); 
request.Headers.Add("Pragma", "no-cache");     
request.Headers.Add("OTCSTicket", /* ticket here */);
request.RequestUri = new Uri(uri);
request.Method = HttpMethod.Post;
request.Content = new ByteArrayContent(data);
request.Content.Headers.ContentType = new MediaTypeHeaderValue(MimeMapping.GetMimeMapping(filePath));
request.Headers.ExpectContinue = false;

var httpClientHandler = new HttpClientHandler
{
  Proxy = WebRequest.GetSystemWebProxy(),
  UseProxy = true,
  AllowAutoRedirect = true
};

using (var client = new HttpClient(httpClientHandler))
{
  var response = client.SendAsync(request).Result;
  IEnumerable<string> temp;
  var vals = response.Headers.TryGetValues("OTCSTicket", out temp) ? temp : new List<string>();
  if (vals.Any())
  {
    this.ticket = vals.First();
  }

  return response.Content.ReadAsStringAsync().Result;
}

Я просматривал developer.opentext.com форумы, но найти полный пример на С# оказалось сложно - есть несколько примеров на javascript, но попытка воспроизвести их на С# или через расширения chrome или firefox дает те же результаты. Вызов других методов CS REST до сих пор не был проблемой, это первый, который вызывает у меня проблемы.

Изменить: я вставил неверный URL-адрес в свой вопрос, который я сейчас исправил. Это было var uri = $"http://[serverName]/otcs/llisapi.dll/api/v1/forms/nodes/create?type=0&parent_id={folderId}&name={docName}";.


person meataxe    schedule 28.12.2015    source источник
comment
Я обновил URL-адрес в соответствии с вопросом Штеффена, но все еще получаю 400 ошибок неверного запроса. Есть ли какие-нибудь журналы, которые я могу проверить, чтобы увидеть, что может быть не так. Я также видел что-то о виджетах пользовательского интерфейса CS - где они и как они могут помочь?   -  person meataxe    schedule 29.12.2015
comment
Я просто перечитываю ваш вопрос. Я заметил, что вы упаковали параметры в URL-адрес. Но вы хотите выполнить POST, поэтому все эти параметры должны войти в тело.   -  person Steffen Roller    schedule 05.01.2016


Ответы (3)


Ваш URL-адрес не похож на REST API, это скорее традиционный URL-адрес, используемый для пользовательского интерфейса.

В этой статье должно быть описано, как сделать то, что вы хотите сделать:

https://developer.opentext.com/webaccess/#url=%2Fawd%2Fresources%2Farticles%2F6102%2Fcontent%2Bserver%2Brest%2Bapi%2B%2Bquick%2Bstart%2Bguide&tab=501

ОТРЕДАКТИРОВАНО:

Хорошо, вот как это должно работать:

отправьте POST на http://www.your_content_server.com/cs[.exe]/api/v1/nodes

отправьте это в своей полезной нагрузке, чтобы создать документ в рабочей области предприятия.

type=144
parent_id=2000
name=document_name.txt
<file>

Незавершенная демонстрация на Python будет выглядеть так. Сначала убедитесь, что вы получили действительный билет.

files = {'file': (open("file.txt", 'rb')}
data = { 'type': 144, 'parent_id': 2000, 'name': 'document_name.txt' }
cs = requests.post(url, headers={'otcsticket':'xxxxxxx'}, data=data, files=files)
if cs.status_code == 200:
    print "ok"
else:
    print cs.text
person Steffen Roller    schedule 28.12.2015
comment
Вот что меня разочаровало — чванливая документация и краткое руководство кажутся противоречащими друг другу. В документах swagger указано, что тип, родительский идентификатор и имя должны быть в строке запроса, но в кратком руководстве указано, что они должны быть в теле запроса. Ни один из них не упоминает, как прикрепить фактический файл для загрузки. Что было бы идеально, так это рабочий пример С# или javascript. Я все еще получаю 400 ошибок, и их недостаточно, чтобы указать мне правильное направление. - person meataxe; 29.12.2015
comment
как добавить BuilingId для запроса .tried ниже data = { 'type': 144, 'parent_id': 2000, 'name': 'document_name.txt', 'BuilingId': 'xxxx'}, показывающий следующую ошибку BuilingId является обязательным полем . - person user202; 16.08.2017

Вам понадобится ввод формы, чтобы получить файл на странице, затем вы можете использовать файловые потоки для его перенаправления, здесь есть отличное руководство для этого.

Чтение файлов в JavaScript с помощью File API

Вот пример Jquery/Ajax.

Я считаю, что лучший способ сделать это — использовать Postman (плагин Chrome) для экспериментов, пока вы не освоитесь.

var form = new FormData();
form.append("file", "*filestream*"); 
form.append("parent_id", "100000");
form.append("name", "NameYourCreatedFile");
form.append("type", "144");

var settings = {
  "async": true,
  "url": "/cs.exe/api/v1/nodes", // You will need to amend this to match your environment
  "method": "POST",
  "headers": {
    "authorization": "Basic **use Postman to generate this**",
    "cache-control": "no-cache",
  },
  "processData": false,
  "contentType": false,
  "mimeType": "multipart/form-data",
  "data": form
}

$.ajax(settings).done(function (response) {
  console.log(response);
});
person platinums    schedule 27.09.2016

Похоже, что API OpenText поддерживает загрузку файлов только через асинхронную загрузку JavaScript, а не через традиционную загрузку файлов с использованием типичных запросов отправленных форм, содержащих содержимое файлов (что, честно говоря, довольно дерьмово, поскольку это было бы проще всего обрабатывать на сервере). сторона).

Я связался с их службой поддержки, и они абсолютно ничем не помогли - они сказали, что, поскольку он работает с JavaScript, они не могут мне помочь. Любой, кто использует любой язык, кроме JavaScript, является SOL. Я отправил весь свой пакет API, но они не удосужились провести расследование и хотели закрыть мой тикет как можно скорее.

Единственный способ, который я нашел для этого, — загрузить/отправить файл в каталог «Загрузить» на вашем веб-сервере Content Server (на нашем он был установлен в D:\Upload). Расположение этого каталога настраивается в разделе администратора.

После отправки файла на веб-сервер отправьте запрос на создание узла с параметром file, равным полному пути к файлу, находящемуся на вашем сервере, так как API OpenText попытается получить файл из этого каталога.

Для этого я создал PHP API, и вы можете просмотреть его использование здесь:

https://github.com/FBCLIT/OpenTextApi

<?php

use Fbcl\OpenTextApi\Client;

$client = new Client('http://server.com/otcs/cs.exe', 'v1');

$api = $client->connect('username', 'secret');

try {
    // The folder node ID of where the file will be created under.
    $parentNodeId = '12356';

    // The file name to display in OpenText
    $fileName = 'My Document.txt';

    // The actual file path of the file on the OpenText server.
    $serverFilePath = 'D:\Upload\My Document.txt';

    $response = $api->createNodeDocument($parentNodeId, $fileName, $serverFilePath);

    if (isset($response['id'])) {
        // The ID of the newly created document will be returned.
        echo $response['id']; 
    }   
} catch (\Exception $ex) {
    // File not found on server drive, or issue creating node from given parent.
}

Обнаружение типа MIME происходит автоматически, и вам не нужно ничего отправлять, чтобы определить тип файла. Вы можете назвать файл как угодно без расширения.

Я также обнаружил, что вы не можете использовать IP-адрес или имя хоста для загрузки файлов в этом поместье. Вы должны ввести путь, который является локальным для сервера, на который вы загружаете. Однако вы можете указать только имя файла, который существует в каталоге Upload, и OpenText API, похоже, найдет его без проблем.

Например, вы можете передать D:\Uploads\Document.txt или Document.txt.

Если вы не сделали это правильно, вы должны получить ошибку:

Ошибка клиента: POST http://server.com/otcs/cs.exe/api/v1/nodes привела к ответу 400 Bad Request: {"error":"Ошибка: файл не найден в каталоге загрузки."}

person Steve Bauman    schedule 16.10.2019