2017-01-31 3 views
0

다른 시스템을 통해 파일을 sensenet에 업로드하는 요구 사항이 있습니다.Sensenet : Sensenet Client API를 통해 파일 업로드 및 수정 된 사용자 집합

내가 파일을 업로드 할 Sensenet 클라이언트 API를 사용하려고 해요하지만 후속 링크에 설명 된 예를 사용하여 어려운 데 : 이 Client Library (코드가 잘 실행되지만 파일이 Sensenet에 표시되지 않음) 를 Common API Calls (코드를 컴파일하는 데 어려움이 있습니다 ... BinaryData 객체를 인스턴스화하는 데

이 외에도 각 코드를 업로드 할 때마다 코드가 아니라 사용자가 지정하는 "수정 한 사람"을 정의해야합니다. 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과 외부 응용 프로그램간에 다른 것으로 가정 할 때). .) –