Sensenet:通过Sensenet客户端API上传文件并设置修改后的用户

时间:2017-01-31 19:37:23

标签: sensenet

我的要求是将文件通过其他系统上传到sensenet。

我尝试使用Sensenet客户端API上传文件,但我很难使用以下链接中记录的示例: Client Library(代码运行良好,但文件没有出现在Sensenet上) Common API Calls(我无法编译代码......来实例化BinaryData对象)

除此之外,我需要为每个上传文件定义" Modified By"我在我的代码中指定的,而不是我用来在API中验证我的用户。

1 个答案:

答案 0 :(得分:1)

我认为重写ModifiedBy字段是一个边缘情况(或一个小的黑客),但它可能没有任何魔法(见代码)。最简单的方法是POST后跟PATCH,它完全由SenseNet.Client管理(代码使用本地演示站点):

    static void Main(string[] args)
    {
        ClientContext.Initialize(new[]
            {new ServerContext {Url = "http://localhost", Username = "admin", Password = "admin"}});

        var localFilePath = @"D:\Projects\ConsoleApplication70\TestFileFromConsole1.txt";
        var parentPath = "/Root/Sites/Default_Site/workspaces/Document/londondocumentworkspace/Document_Library";
        var fileName = "TestFileFromConsole1.txt";
        var path = parentPath + "/" + fileName;
        var userPath = "/Root/IMS/BuiltIn/Demo/ProjectManagers/alba";

        using (var stream = new FileStream(localFilePath, FileMode.Open))
            Content.UploadAsync(parentPath, fileName, stream).Wait();
        Console.WriteLine("Uploaded");

        Modify(path, userPath).Wait();
        Console.WriteLine("Modified");

        Console.Write("Press <enter> to exit...");
        Console.ReadLine();
    }

    // Rewrites the ModifiedBy field
    private static async Task Modify(string path, string userPath)
    {
        var content = await Content.LoadAsync(path);
        content["ModifiedBy"] = userPath;
        await content.SaveAsync();
    }