2013-09-27 3 views
0

아래의 스크립트를 alfresco에서 업로드하는 데 사용하고 있지만 충돌을 일으키는 것을 거부합니다.같은 이름의 파일을로드하는 중 오류가 발생했습니다.

 "<?xml version='1.0' encoding='utf-8'?>\n" + 
    "<entry xmlns='http://www.w3.org/2005/Atom' xmlns:app=\"http://www.w3.org/2007/app\" xmlns:cmisra=\"http://docs.oasis-open.org/ns/cmis/restatom/200908/\" xmlns:cmis=\"http://docs.oasis-open.org/ns/cmis/core/200908/\" xmlns:alf=\"http://www.alfresco.org\">\n" + 
    "<title>" + fileName + "</title>\n" + 
    "<summary>" + fileDescrption + "</summary>\n" + 
    "<author>" + author + "</author>\n" + 
    "<content type='" + mimeType.toString() + "'>" + encoder.encode(bytes) + "</content>\n" + 
    "<cmisra:object>\n"+ 
    "<cmis:properties>\n" + 
    "<cmis:propertyId propertyDefinitionId=\"cmis:objectTypeId\">\n"+ 
    "<cmis:value>D:hs:doc</cmis:value>\n"+ 
    "</cmis:propertyId>\n" + 

    "<cmis:propertyId propertyDefinitionId=\"cmis:versionable\">\n"+ 
    "<cmis:value>TRUE</cmis:value>\n"+ 
    "</cmis:propertyId>\n" + 

    "</cmis:properties>\n" + 
    "</cmisra:object>\n" + 
    "</entry>\n"; 

어떻게 CMIS 받침대를 사용하여 버전 사용할 수 있습니다.

+1

어떤 REST 엔드 포인트를 호출하고 있는지, 어떤 HTTP 메소드를 사용하고 있는지 표시하고 있지 않으므로 자세한 정보를 제공 할 수 있습니까? – skuro

+0

많은 기존 CMIS 라이브러리 중 하나만 사용하는 대신 업로드 용으로 자체 CMIS 클라이언트를 작성하려는 이유가 있습니까? – Gagravarr

답변

1

저는 Gagravarr에 동의합니다. http://chemistry.apache.org 또는 다른 소스에서 제공되는 라이브러리 중 하나를 사용하면 많은 시간과 노력을 절약 할 수 있습니다.

그러나 질문에 대한 답은 기존 개체와 같은 폴더에 같은 이름의 새 개체를 만드는 것처럼 들리는 것입니다. Alfresco는 이것을 허용하지 않으므로 오류가 발생합니다.

대신 기존 개체를 업데이트해야합니다. AtomPub Binding을 사용하고 있으므로 콘텐츠 스트림을 업데이트하려는 경우 수행하면 콘텐츠 스트림의 URL에서 PUT을 수행 할 수 있습니다.

대신 속성을 업데이트하려고하는 경우 개체 URL에 PUT을 수행 할 수 있습니다.

이렇게하면 새 버전을 만들지 않고 개체가 변경됩니다. 대신 새 버전을 만들려면 개인 작업 복사본 (PWC)을 반환하는 개체 (체크 아웃 된 컬렉션으로 개체 POST)를 체크 아웃해야합니다. 그런 다음 위에서 설명한대로 콘텐츠 스트림을 설정하고 PWC의 속성을 업데이트 한 다음 체크인을 수행 할 수 있습니다. 그러면 새 버전이 만들어집니다.

Alfresco가 변경 토큰을 건네 주면 이러한 종류의 업데이트를 수행 할 때 다시 넘겨 줄 필요가 있거나 업데이트 충돌 예외가 발생합니다.

이 작업을 수행하는 방법에 대한 자세한 내용이 필요하면 사양을 읽으십시오. 친숙한 API가 저수준의 AtomPub XML, PUT, POST 및 DELETE를 처리하기보다는이를 수행하기를 원하는 경우 CMIS 라이브러리를 가져 오십시오.