Alfresco Share 5.2创建Excel节点文件大小为0无法下载求助
问题排查与修复
你的代码核心问题是没有把生成的HSSFWorkbook内容写入到节点中,反而尝试读取刚创建的空节点内容流,写入后自然是0字节。
问题分析
你创建并填充了HSSFWorkbook对象,但后续代码完全没用到它。反而调用contentService.getReader(node, ContentModel.PROP_CONTENT)获取新节点的读取器——刚创建的节点本身没有任何内容,所以这个读取器的输入流是空的,写入后文件自然无内容。
修复后的代码
把读取空reader的逻辑替换成将HSSFWorkbook写入ContentWriter的逻辑,关键修改如下:
HSSFWorkbook document = new HSSFWorkbook(); HSSFSheet sheet = document.createSheet("search-results"); HSSFRow row = sheet.createRow(0); HSSFRow rowSecond = sheet.createRow(1); HSSFCell cell = row.createCell(0); HSSFCell cellWithValue = rowSecond.createCell(0); cell.setCellValue("Link"); cellWithValue.setCellValue(urlLink); Map<QName, Serializable> props = new HashMap<QName, Serializable>(); props.put(ContentModel.PROP_NAME, nameOfFile); ChildAssociationRef childAssoc = nodeService.createNode(folderSaveResults, ContentModel.ASSOC_CONTAINS, ContentModel.ASSOC_CONTAINS, ContentModel.TYPE_CONTENT, props); NodeRef node = childAssoc.getChildRef(); ContentWriter contentWriter = contentService.getWriter(node, ContentModel.PROP_CONTENT, true); contentWriter.setMimetype(mimetypeService .guessMimetype(nodeService.getProperty(node, ContentModel.PROP_NAME).toString())); this.behaviourFilter.disableBehaviour(node); // 核心修改:将生成的Excel内容写入节点 try (ByteArrayOutputStream bos = new ByteArrayOutputStream()) { document.write(bos); contentWriter.putContent(new ByteArrayInputStream(bos.toByteArray())); } catch (IOException e) { // 这里添加异常处理,比如日志记录或抛出业务异常 e.printStackTrace(); } this.behaviourFilter.enableBehaviour(node); System.out.println(node);
关键说明
- 用
ByteArrayOutputStream捕获HSSFWorkbook的输出内容,再转换成ByteArrayInputStream传给contentWriter.putContent(),完成内容写入。 - 移除了无用的
ContentReader相关代码,因为新节点初始无内容,读取操作没有意义。 - 使用try-with-resources自动关闭流,避免资源泄漏。
修改后,生成的Excel内容会被正确写入Alfresco节点,文件大小不再为0字节。
内容的提问来源于stack exchange,提问作者Mike1988B
相关产品推荐
相关产品推荐

