openCMIS provides 'getContentStream' method to get the
content stream associated with a document.
Following table summarizes the overloaded forms of
‘getContentStream’ method.
Method
|
Description
|
ContentStream getContentStream()
|
Retrieves the content stream of this document. it returns
null, if the document has no content.
|
ContentStream getContentStream(BigInteger offset,
BigInteger length)
|
Retrieves the content stream of this document from
given offset to the length bytes.
offset: from
where to read the contents of the document. If it is set to null, then stream
read starts from beginning.
length: Maximum
length of the stream to read, if it is set to null, then we can read till the
end of the stream.
|
ContentStream getContentStream(String streamId)
|
Retrieves the content stream that is associated with
the given stream ID. This is usually used to read the renditions of the
document.
|
Following application creates a file
"sampleDoc.json" under root folder, once the document is created, it
creates content stream from the input file "C:\\Users\\test.json" and
set the document "sampleDoc.json".
In summary following application perform 3 steps.
a. Create a document
"sampleDoc.json".
Map<String,
String> properties = new HashMap<>();
properties.put("cmis:objectTypeId",
"cmis:document");
properties.put("cmis:name",
"sampleDoc.json");
Folder
rootFolder = session.getRootFolder();
Document
document = rootFolder.createDocument(properties, null, null);
b. Set the content
stream to the document
ObjectFactoryImpl
objectFactory = new ObjectFactoryImpl();
File
file = new File(localFilePath);
try
(InputStream stream = new FileInputStream(file)) {
String
mimetype = Files.probeContentType(file.toPath());
ContentStream
contentStream = objectFactory.createContentStream(file.getName(),
file.length(), mimetype,
stream);
document.setContentStream(contentStream,
true, true);
}
catch (IOException e) {
//
TODO Auto-generated catch block
e.printStackTrace();
}
c. Read the contents
of the document.
ContentStream
contentStream = document.getContentStream();
try
(InputStream inputStream = contentStream.getStream();
BufferedInputStream
bufferedInputStream = new BufferedInputStream(inputStream)) {
byte[]
buffer = new byte[65535];
int
bytesRead = -1;
while
((bytesRead = bufferedInputStream.read(buffer)) != -1) {
String
str = new String(buffer, 0, bytesRead);
System.out.print(str);
}
}
catch (IOException e) {
System.out.println("Error
occurred while processing the file content");
System.out.println(e.getMessage());
}
Following is the complete working application.
TestCmis.java
package com.sample.util; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.util.HashMap; import java.util.Map; import org.apache.chemistry.opencmis.client.api.Document; import org.apache.chemistry.opencmis.client.api.Folder; import org.apache.chemistry.opencmis.client.api.Session; import org.apache.chemistry.opencmis.client.api.SessionFactory; import org.apache.chemistry.opencmis.client.runtime.SessionFactoryImpl; import org.apache.chemistry.opencmis.client.runtime.repository.ObjectFactoryImpl; import org.apache.chemistry.opencmis.commons.SessionParameter; import org.apache.chemistry.opencmis.commons.data.ContentStream; import org.apache.chemistry.opencmis.commons.enums.BindingType; public class TestCmis { private static String serverURL = "http://localhost:8080/chemistry-opencmis-server-inmemory-1.1.0/browser"; private static String repositoryId = "A1"; private static String localFilePath = "C:\\Users\\test.json"; private static Session getSession() { Map<String, String> parameters = new HashMap<>(); parameters.put(SessionParameter.BINDING_TYPE, BindingType.BROWSER.value()); parameters.put(SessionParameter.USER, ""); parameters.put(SessionParameter.PASSWORD, ""); parameters.put(SessionParameter.REPOSITORY_ID, repositoryId); parameters.put(SessionParameter.BROWSER_URL, serverURL); SessionFactory sessionFactory = SessionFactoryImpl.newInstance(); return sessionFactory.createSession(parameters); } private static void setTheContentStream(Document document) { /* Creating content stream */ ObjectFactoryImpl objectFactory = new ObjectFactoryImpl(); File file = new File(localFilePath); try (InputStream stream = new FileInputStream(file)) { String mimetype = Files.probeContentType(file.toPath()); ContentStream contentStream = objectFactory.createContentStream(file.getName(), file.length(), mimetype, stream); document.setContentStream(contentStream, true, true); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private static void readTheContentsOfTheDocument(Document document) { ContentStream contentStream = document.getContentStream(); try (InputStream inputStream = contentStream.getStream(); BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream)) { byte[] buffer = new byte[65535]; int bytesRead = -1; while ((bytesRead = bufferedInputStream.read(buffer)) != -1) { String str = new String(buffer, 0, bytesRead); System.out.print(str); } } catch (IOException e) { System.out.println("Error occurred while processing the file content"); System.out.println(e.getMessage()); } } public static void main(String args[]) throws IOException { Session session = getSession(); /* Create the document 'sampleDoc.json' */ Map<String, String> properties = new HashMap<>(); properties.put("cmis:objectTypeId", "cmis:document"); properties.put("cmis:name", "sampleDoc.json"); Folder rootFolder = session.getRootFolder(); Document document = rootFolder.createDocument(properties, null, null); setTheContentStream(document); readTheContentsOfTheDocument(document); } }
No comments:
Post a Comment