Загрузить файл с OpenCMIS не имеет содержимого
Я пытаюсь загрузить файл в мой репозиторий Alfresco, используя Apache Chemistry OpenCMIS. Файл создан и свойства правильные, но содержимого нет, файл равен 0 байтам. Я дважды проверил, и нет ничего плохого в исходном файле. Вот мой код Java:
File content = new File(somepath);
try{
String mimeType = new MimetypesFileTypeMap().getContentType(content);
logger.debug("mimetype: " + mimeType);
logger.debug("file: " + content.getAbsolutePath());
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(PropertyIds.OBJECT_TYPE_ID, BaseTypeId.CMIS_DOCUMENT.value());
properties.put(PropertyIds.NAME, content.getName());
FileInputStream fis = new FileInputStream(content);
DataInputStream dis = new DataInputStream(fis);
byte[] bytes = new byte[(int) content.length()];
dis.readFully(bytes);
ContentStream cs = new ContentStreamImpl(content.getName(), BigInteger.valueOf(bytes.length), mimeType, dis);
Folder folder = (Folder) session.getObjectByPath("/myfolder");
Document doc = folder.createDocument(properties, cs, VersioningState.MAJOR);
return doc.getId();
}catch(CmisBaseException e){
logger.error("error uploading file: "+ e.getMessage(), e);
}
Там не исключение поймано.
2 ответа
Я думаю, что есть проблема с потоком контента, который вы передаете.
Попробуйте заменить ваш код этим
String docText = "This is a sample document";
byte[] content = docText.getBytes();
InputStream stream = new ByteArrayInputStream(content);
ContentStream contentStream = getSession().getObjectFactory().createContentStream(filename, Long.valueOf(content.length), "text/plain", stream);
Вы можете постепенно изменить этот простой текст с содержанием из вашего нового файла на следующем шаге.
Я искал пример по этому поводу и нашел ваш вопрос, проблема с оригиналом, если я не ошибаюсь, в том, что вы читаете буфер заранее, поэтому указатель находится в конце его, когда вы передаете его в поток контента, Я делаю небольшой урок только для того, чтобы протестировать некоторые функции, которые я хочу реализовать в программе позже, и этот блок работает с вашим первоначальным подходом.
File content = new File("C:\\\\asdf.asdf");
try{
String mimeType = new MimetypesFileTypeMap().getContentType(content);
System.out.println("mimetype: " + mimeType);
System.out.println("file: " + content.getAbsolutePath());
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(PropertyIds.OBJECT_TYPE_ID,BaseTypeId.CMIS_DOCUMENT.value()+",P:cm:titled");
properties.put("cm:description", "upload desde código");
properties.put(PropertyIds.NAME, content.getName());
FileInputStream fis = new FileInputStream(content);
DataInputStream dis = new DataInputStream(fis);
ContentStream cs = new ContentStreamImpl(content.getName(),BigInteger.valueOf(content.length()), mimeType, dis);
Document doc = newFolder.createDocument(properties, cs, VersioningState.MAJOR);
}catch(CmisBaseException ex){
Logger.getLogger(CMISTest.class.getName()).log(Level.SEVERE, null, ex);
} catch (FileNotFoundException ex) {
Logger.getLogger(CMISTest.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(CMISTest.class.getName()).log(Level.SEVERE, null, ex);
}