使用C#将文档上传到Alfresco(HTML格式为POST,无CMIS)

时间:2019-06-24 17:49:02

标签: c# alfresco alfresco-enterprise

Alfresco文档不能很好地解释为执行上传而期望的HTTP请求类型。

有人可以解释如何使用简单的HTTP请求而非CMIS将文档上传到Alfresco DMS吗?

2 个答案:

答案 0 :(得分:1)

露天API http://YOURALFRESCOHOST/alfresco/service/api/upload期望: multipart/form-data通过HTTP Post请求发送。

因此,该服务希望使用带有<form>标签的老式HTML页面。含义数据将通过表单投递在html中的默认方式发送。我猜测这样做是为了简化创建自己的文档上传屏幕的过程。

当然,这只是另一个http请求,因此可以通过C#或任何其他编程语言来模拟post操作。

非常感谢从.NET 4.5开始,我们有了MultipartFormDataContent类,可以用于此确切目的。请参考下面的示例代码来执行您的上传:

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"
   }
}

答案 1 :(得分:0)

如果您使用的是5.2版或更高版本,请始终检查API资源管理器以查看已有的内容以及完善的文档:

https://api-explorer.alfresco.com/api-explorer/#!/nodes/updateNodeContent

之后,您可以转到本地安装以查看所有已安装的Web脚本(对于任何Alfresco版本):

http://localhost:8080/alfresco/service/

然后,浏览网页,等等:)