파일 업로드는 기본적으로 JCR 2.0과 JCR 2.0에서 동일합니다. 그러나 JCR 2.0에서는 몇 가지 기본 제공 속성 정의를 추가하여 유용합니다.
은 "NT : 파일"
노드 유형은 파일을 나타 내기 위해 의도가 2 개의 내장 속성 정의 JCR (자동 생성 된 노드가 생성 될 때 저장소가 있습니다 둘 다) 2.0 :
- JCR : 생성 (DATE)
- JCR : "내용 JCR"createdBy (STRING)
은 명명 된 하나의 아이를 정의합니다. 이 "jcr : content"노드는 모든 노드 유형이 될 수 있지만 일반적으로 내용 자체와 관련된 모든 정보는이 하위 노드에 저장됩니다.이러한 속성은 정의가 노드 유형 : 사실상의 표준은 "자원 NT"를 : 사용하는 것입니다
- JCR : 필수 데이터 (BINARY)
- JCR :과 lastModified (DATE)는
- JCR를 자동 생성 : lastModifiedBy (STRING) 자동 작성
- jcr : mimeType (STRING)이 (가) 보호 되었습니까?
- jcr : 인코딩 (STRING)이 (가) 보호 되었습니까?
"jcr : mimeType"및 "jcr : encoding"이 JCR 2.0에 추가되었습니다.
특히 "jcr : mimeType"속성의 목적은 사용자가 원하는 내용을 정확하게 수행하는 것입니다. 즉 콘텐츠의 "유형"을 캡처하는 것입니다. 그러나 "jcr : mimeType"및 "jcr : encoding"속성 정의는 (JCR 구현에 의해) 보호 된 것으로 정의 될 수 있습니다 (JCR 구현이 자동으로 설정 함을 의미).이 경우 수동으로 허용되지 않습니다 이러한 속성을 설정하십시오. 나는 Jackrabbit과 ModeShape이 이것을 보호 된 것으로 취급하지 않는다고 생각합니다.
// Get an input stream for the file ...
File file = ...
InputStream stream = new BufferedInputStream(new FileInputStream(file));
Node folder = session.getNode("/absolute/path/to/folder/node");
Node file = folder.addNode("Article.pdf","nt:file");
Node content = file.addNode("jcr:content","nt:resource");
Binary binary = session.getValueFactory().createBinary(stream);
content.setProperty("jcr:data",binary);
그리고 JCR 구현은 "JCR을 : mimeType를"치료하지 않는 경우 재산 여기
이 내장 된 노드 유형을 사용하여 JCR 2.0 저장소로 파일을 업로드하는 방법을 보여줍니다 몇 가지 코드 (즉, 잭 래빗과 ModeShape) 보호, 당신은 수동으로이 속성을 설정해야 할 것 :
content.setProperty("jcr:mimeType","application/pdf");
메타 데이터가 매우 쉽게 저장할 수 있습니다 "NT : 파일"과 "JCR : 내용", 노드하지만 밖으로 -of-the-box "nt : file"및 "nt : resource"노드 유형은 추가 속성을 허용하지 않습니다. 따라서 다른 속성을 추가하기 전에 먼저 저장하려는 속성 종류에 대한 속성 정의가있는 mixin (또는 여러 mixins)을 추가해야합니다. 모든 속성을 허용하는 mixin을 정의 할 수도 있습니다. 다음은 CND 파일이 같은 믹스 인 정의한다 :
content.addMixin("custom:extensible");
content.setProperty("anyProp","some value");
content.setProperty("custom:otherProp","some other value");
또한 정의 할 수와 허용 믹스 인을 사용 :이 노드 유형 정의를 등록한 후
<custom = 'http://example.com/mydomain'>
[custom:extensible] mixin
- * (undefined) multiple
- * (undefined)
를, 당신은 다음 노드에 이것을 사용할 수 있습니다 어떤 Dublin Core element을 위해 : 이러한 속성의
<dc = 'http://purl.org/dc/elements/1.1/'>
[dc:metadata] mixin
- dc:contributor (STRING)
- dc:coverage (STRING)
- dc:creator (STRING)
- dc:date (DATE)
- dc:description (STRING)
- dc:format (STRING)
- dc:identifier (STRING)
- dc:language (STRING)
- dc:publisher (STRING)
- dc:relation (STRING)
- dc:right (STRING)
- dc:source (STRING)
- dc:subject (STRING)
- dc:title (STRING)
- dc:type (STRING)
모든 선택 사항이 믹스 인은 이름 또는 유형의 속성을 허용하지 않습니다. 나는 또한 이들 중 일부가 이미 내장 속성 (예 : "jcr : createBy", "jcr : lastModifiedBy", "jcr : created")으로 표시된다는 사실에서이 'dc : , "jcr : lastModified", "jcr : mimeType"), 그 중 일부는 내용과 더 관련이 있고 다른 일부는 파일과 더 관련이있을 수 있습니다.
필요하다면 상속을 사용하여 메타 데이터 요구에 더 잘 맞는 다른 믹스 인을 정의 할 수 있습니다. 그러나 믹스 인 (mixins)으로 상속을 사용할 때는 조심하십시오. JCR은 노드가 여러 개의 믹스 인을 허용하기 때문에 믹스를 엄격하게 범위와 패싯 지향으로 설계하는 것이 가장 좋습니다 (예 : "ex : taggable", "ex : describeable" 필요에 따라 적절한 믹스 인을 노드에 적용하기 만하면됩니다.
("nt : file"노드 아래에 더 많은 어린이들을 허용하고 거기에 일부 메타 데이터를 저장하는 믹스 인을 정의하는 것은 훨씬 더 복잡합니다.)
믹스는 환상적이고 JCR 콘텐츠에 엄청난 양의 유연성과 성능을 제공합니다.
아, 그리고 당신이 원하는 모든 노드를 만든 경우, 세션 저장해야합니다 : 2.4.2 작업,
session.save();
당신이 좀 더 컨텍스트를 줄 수 있습니다? 귀하의 질문에 관해 구체적으로 설명해 주실 수 있습니까? 이 품목 목록은 어디에서 왔습니까? – jzd
@jzd : 저는 JCR과 jackrabbit에 대해 많이 알지 못해서 어떻게 처리되는지에 대해서는 언급하지 않습니다. – lisak
문서가 내 애플리케이션에 업로드됩니다. 각 문서는 업로드되며 문서는 처리되고 지속됩니다. – lisak