使用 C# 将文档上传到 Alfresco(Html 形式 POST,无 CMIS)
Upload Document to Alfresco using C# (Html form POST, no CMIS)
alfresco 文档没有很好地解释执行上传所需的 HTTP 请求类型。
有人可以解释一下如何使用简单的 HTTP 请求而不是 CMIS 将文档上传到 Alfresco DMS 吗?
露天 api http://YOURALFRESCOHOST/alfresco/service/api/upload
预计:
multipart/form-data
将通过 HTTP Post 请求发送。
因此该服务需要使用带有 <form>
标记的旧学校 html 页面。意思是数据将通过表单 posting 在 html 中的工作方式的默认方式发送。我猜这样做是为了简化创建您自己的文档上传屏幕的过程。
当然,在幕后它只是另一个 http 请求,因此可以通过 C# 或任何其他编程语言模拟 post 操作。
谢天谢地,从 .NET 4.5 开始,我们有了 MultipartFormDataContent class 可以用于这个确切的目的。请参考下面的示例代码来执行您的上传:
using (var client = new HttpClient())
{
using (var formData = new MultipartFormDataContent())
{
formData.Add(new StreamContent(File.Open("test.txt", FileMode.Open)), "filedata", "test.txt");
formData.Add(new StringContent("mysiteid"), "siteid");
formData.Add(new StringContent("mycontainerid"), "containerid");
formData.Add(new StringContent("/"), "uploaddirectory");
formData.Add(new StringContent("test"), "description");
formData.Add(new StringContent("cm:content"), "contenttype");
formData.Add(new StringContent("true"), "overwrite");
var response = client.PostAsync("http://YOURALFRESCOHOST/alfresco/service/api/upload?alf_ticket=TICKET_XXXXXXXXXXXXXXXXXXXXXXXXX", formData).Result;
string result = null;
if (response.Content != null)
{
result = response.Content.ReadAsStringAsync().Result;
}
if (response.IsSuccessStatusCode)
{
if (string.IsNullOrWhiteSpace(result))
result = "Upload successful!";
}
else
{
if (string.IsNullOrWhiteSpace(result))
result = "Upload failed for unknown reason";
}
Console.WriteLine($"Result is: {result}");
}
}
如果上传成功,您将看到这样的响应:
{
"nodeRef": "workspace://SpacesStore/38238e6f-e9d9-4158-a3ce-8a13d0962348",
"fileName": "test.txt",
"status":
{
"code": 200,
"name": "OK",
"description": "File uploaded successfully"
}
}
如果您使用的是 5.2 或更高版本,请始终检查 API 资源管理器以查看已经存在的内容以及不错的文档:
https://api-explorer.alfresco.com/api-explorer/#!/nodes/updateNodeContent
之后,您可以转到本地安装以查看所有已安装的网络脚本(适用于任何 Alfresco 版本):
http://localhost:8080/alfresco/service/
之后,浏览网页然后 :)
alfresco 文档没有很好地解释执行上传所需的 HTTP 请求类型。
有人可以解释一下如何使用简单的 HTTP 请求而不是 CMIS 将文档上传到 Alfresco DMS 吗?
露天 api http://YOURALFRESCOHOST/alfresco/service/api/upload
预计:
multipart/form-data
将通过 HTTP Post 请求发送。
因此该服务需要使用带有 <form>
标记的旧学校 html 页面。意思是数据将通过表单 posting 在 html 中的工作方式的默认方式发送。我猜这样做是为了简化创建您自己的文档上传屏幕的过程。
当然,在幕后它只是另一个 http 请求,因此可以通过 C# 或任何其他编程语言模拟 post 操作。
谢天谢地,从 .NET 4.5 开始,我们有了 MultipartFormDataContent class 可以用于这个确切的目的。请参考下面的示例代码来执行您的上传:
using (var client = new HttpClient())
{
using (var formData = new MultipartFormDataContent())
{
formData.Add(new StreamContent(File.Open("test.txt", FileMode.Open)), "filedata", "test.txt");
formData.Add(new StringContent("mysiteid"), "siteid");
formData.Add(new StringContent("mycontainerid"), "containerid");
formData.Add(new StringContent("/"), "uploaddirectory");
formData.Add(new StringContent("test"), "description");
formData.Add(new StringContent("cm:content"), "contenttype");
formData.Add(new StringContent("true"), "overwrite");
var response = client.PostAsync("http://YOURALFRESCOHOST/alfresco/service/api/upload?alf_ticket=TICKET_XXXXXXXXXXXXXXXXXXXXXXXXX", formData).Result;
string result = null;
if (response.Content != null)
{
result = response.Content.ReadAsStringAsync().Result;
}
if (response.IsSuccessStatusCode)
{
if (string.IsNullOrWhiteSpace(result))
result = "Upload successful!";
}
else
{
if (string.IsNullOrWhiteSpace(result))
result = "Upload failed for unknown reason";
}
Console.WriteLine($"Result is: {result}");
}
}
如果上传成功,您将看到这样的响应:
{
"nodeRef": "workspace://SpacesStore/38238e6f-e9d9-4158-a3ce-8a13d0962348",
"fileName": "test.txt",
"status":
{
"code": 200,
"name": "OK",
"description": "File uploaded successfully"
}
}
如果您使用的是 5.2 或更高版本,请始终检查 API 资源管理器以查看已经存在的内容以及不错的文档:
https://api-explorer.alfresco.com/api-explorer/#!/nodes/updateNodeContent
之后,您可以转到本地安装以查看所有已安装的网络脚本(适用于任何 Alfresco 版本):
http://localhost:8080/alfresco/service/
之后,浏览网页然后 :)