如何使用 REST api 将新文档添加到 Content Server 10.5
How can I add a new document to Content Server 10.5 using the REST api
如何使用 REST api 将新文档添加到 Content Server 10.5?
我正在按照 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
论坛,但事实证明很难找到一个完整的 c# 示例 - javascript 中有一些示例,但试图在 c# 或通过 chrome 或 firefox 扩展只给出相同的结果。到目前为止,调用其他 CS REST 方法不是问题,这是第一个给我带来问题的方法。
编辑:我将错误的 url 粘贴到我的问题中,现在我已经修复了。这是 var uri = $"http://[serverName]/otcs/llisapi.dll/api/v1/forms/nodes/create?type=0&parent_id={folderId}&name={docName}";
。
您的 URL 看起来不像 REST API,而是用于 UI.
的传统 URL
这篇文章应该描述如何做你想做的事情:
已编辑:
好的,这就是它应该的工作方式:
发送 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
您需要一个表单输入才能将文件放到页面上,然后您可以使用文件流对其进行重定向,这里有很好的指南。
Reading files in JavaScript using the File APIs
这里有一个 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);
});
OpenText API 似乎只支持通过异步 JavaScript 上传的文件上传 - 而不是通过使用包含文件内容的典型发布表单请求的传统文件上传(这对于老实说——因为这在服务器端最容易处理。
我已经联系了他们的支持,但他们完全没有帮助 - 他们说既然它与 JavaScript 一起工作,那么他们就帮不了我了。使用 JavaScript 以外的任何语言的任何其他人都是 SOL。我提交了整个 API 包裹,但他们没有费心调查并想尽快关闭我的工单。
我发现的 唯一 方法是将文件上传/发送到您的 Content Servers 网络服务器(在我们的服务器上)的 'Upload' 目录中它被设置为 D:\Upload。此目录位置可在管理部分配置。
将文件发送到 Web 服务器后,发送一个创建节点请求,其中 file
参数设置为所在文件的 完整文件路径 在您的服务器上,因为 OpenText API 将尝试从此目录检索文件。
我为此创建了一个 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 地址或主机名在此庄园上传文件。您必须输入 local 到要上传到的服务器的路径。但是,您可以 只提供存在于上传目录中的文件名 ,OpenText API 似乎可以很好地找到它。
例如,您可以传递 D:\Uploads\Document.txt
或 Document.txt
.
如果您没有正确完成,您应该得到错误:
客户端错误:POST http://server.com/otcs/cs.exe/api/v1/nodes
导致 400 Bad Request
响应:{"error":"Error: File could not be found within the upload directory."}
如何使用 REST api 将新文档添加到 Content Server 10.5?
我正在按照 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
论坛,但事实证明很难找到一个完整的 c# 示例 - javascript 中有一些示例,但试图在 c# 或通过 chrome 或 firefox 扩展只给出相同的结果。到目前为止,调用其他 CS REST 方法不是问题,这是第一个给我带来问题的方法。
编辑:我将错误的 url 粘贴到我的问题中,现在我已经修复了。这是 var uri = $"http://[serverName]/otcs/llisapi.dll/api/v1/forms/nodes/create?type=0&parent_id={folderId}&name={docName}";
。
您的 URL 看起来不像 REST API,而是用于 UI.
的传统 URL这篇文章应该描述如何做你想做的事情:
已编辑:
好的,这就是它应该的工作方式:
发送 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
您需要一个表单输入才能将文件放到页面上,然后您可以使用文件流对其进行重定向,这里有很好的指南。
Reading files in JavaScript using the File APIs
这里有一个 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);
});
OpenText API 似乎只支持通过异步 JavaScript 上传的文件上传 - 而不是通过使用包含文件内容的典型发布表单请求的传统文件上传(这对于老实说——因为这在服务器端最容易处理。
我已经联系了他们的支持,但他们完全没有帮助 - 他们说既然它与 JavaScript 一起工作,那么他们就帮不了我了。使用 JavaScript 以外的任何语言的任何其他人都是 SOL。我提交了整个 API 包裹,但他们没有费心调查并想尽快关闭我的工单。
我发现的 唯一 方法是将文件上传/发送到您的 Content Servers 网络服务器(在我们的服务器上)的 'Upload' 目录中它被设置为 D:\Upload。此目录位置可在管理部分配置。
将文件发送到 Web 服务器后,发送一个创建节点请求,其中 file
参数设置为所在文件的 完整文件路径 在您的服务器上,因为 OpenText API 将尝试从此目录检索文件。
我为此创建了一个 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 地址或主机名在此庄园上传文件。您必须输入 local 到要上传到的服务器的路径。但是,您可以 只提供存在于上传目录中的文件名 ,OpenText API 似乎可以很好地找到它。
例如,您可以传递 D:\Uploads\Document.txt
或 Document.txt
.
如果您没有正确完成,您应该得到错误:
客户端错误:POST http://server.com/otcs/cs.exe/api/v1/nodes
导致 400 Bad Request
响应:{"error":"Error: File could not be found within the upload directory."}