Sensenet: загрузка файлов через Sensenet Client API и установка измененного пользователя

У меня есть требование, которое заключается в загрузке файлов через другую систему в sensenet.

Я пытаюсь использовать клиентский API-интерфейс Sensenet для загрузки файлов, но мне трудно использовать примеры, задокументированные по следующим ссылкам: Клиентская библиотека (код работает, но файл не отображается в Sensenet) Общие вызовы API (I у меня проблемы с компиляцией кода... для создания экземпляра объекта BinaryData)

Кроме того, мне нужно для каждого загружаемого файла определить "Изменено", которое я указываю в своем коде, а не пользователя, которого я использую для аутентификации в API.

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();
    }
Другие вопросы по тегам