2017-01-31 4 views
0

私は、他のシステムからsensetetにファイルをアップロードするという要件があります。Sensenet:SensenetクライアントAPIを介してファイルをアップロードし、変更されたユーザを設定

私はファイルをアップロードするSensenetクライアントAPIを使用しようとしているが、私は次のリンクに文書化の例を使用して困難なことだ: Client Library(コードがうまく実行されますが、ファイルがSensenet上には表示されません) Common API Calls(私はコードをコンパイルするのに苦労しています... BinaryDataオブジェクトをインスタンス化する)

これの横に、アップロードファイルごとに、自分のコードで指定した "Modified By"私はAPIで私を認証するために使用します。

+0

共通API呼び出しがサーバー側の一例であり、彼らはコンパイルされませんクライアント上でアップロードを確認します。 –

+0

'ModifiedBy'フィールドを変更するためのカスタムアクションを作成する必要がある可能性があります。これは管理操作と見なされるため、通常のユーザーはそれを簡単に変更できません。しかし、私たちはこれを検証し、答えを投稿します。 –

答えて

0

私はModifiedByフィールドを書き直すことは、エッジケース(または小さなハック)だと思いますが、魔法なしで可能です(コードを参照)。最も簡単な方法は、完全にSenseNet.Clientによって管理されているPATCH、続いPOSTです(コードは、ローカルのデモサイトを使用しています):

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(); 
    } 
+0

ありがとうございます。 「ModifiedByフィールドの書き換えは端的なケースです」と言うと、私は同意したと思います...しかし、他のシステムからsensenetにドキュメントをアップロードする最良の方法は何ですか(認証システムは、sensenetと外部アプリケーション。) –

関連する問題