2013-04-18 3 views
2

Я пытаюсь загрузить файл в репозиторий Alfresco с помощью Apache Chemistry OpenCMIS. Файл создан, и свойства верны, но содержимого нет, файл равен 0 байтам. Я дважды проверял, и нет ничего плохого в исходном файле. Вот мой Java-код:Загрузить файл с OpenCMIS не имеет содержимого

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); 
       } 

Там не исключение поймают.

ответ

4

Я думаю, что есть проблема с потоком контента, который вы передаете.

Попробуйте заменить ваш код этой

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); 

Вы можете постепенно изменять этот простой текст с содержанием от вашего нового файла в следующем шаге.

+0

Спасибо, это работает для меня! – dumazy

1

Я искал пример об этом, и нашел ваш вопрос, проблемы с оригиналом, если я не ошибаюсь, что вы чтением буфера заранее, так что указатель находится в конце его, когда вас передайте его в поток контента, я делаю небольшой класс, просто чтобы проверить некоторую функциональность, которую я хочу реализовать в программе позже, и этот блок работает с вашим первоначальным подходом.

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); 
    } 
Смежные вопросы