从Jackrabbit库中下载文件到web(涉及到inputStream转byte[])

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liujun_for_java/article/details/83016811

项目中用到了Jackrabbit库的使用,我这块主要负责的是查询,前后台展示的数据大部分是从Jackrabbit库中查询得来的,库的文件以二进制的形式进行的保存,当写到元文件的下载的时候卡壳了,特此记录下。

直接从service层开始

    @Override
    public void getZFile(HttpServletResponse response, String uuid) throws Exception {
        //获取Jackrabbit库的Session
        Session session = jcrServer.getInstance();
        //根据uuid获取节点
        Node rootNode = session.getNodeByIdentifier(uuid);
        Node zNode = rootNode.getNode(JackrabbitConst.ZW);
        //获取节点属性 文件的名称
        String fileName = zNode.getProperty(JackrabbitConst.FN).getString();
        Node fNode = zNode.getNode(JackrabbitConst.FI);
        Node jNode = fNode.getNode(JackrabbitConst.JC);
        Property property = jNode.getProperty(JackrabbitConst.JD);
        //获取这个节点文件的二进制
        Binary binary = property.getBinary();
        InputStream stream = binary.getStream();
        //inputStream转byte[]
        byte[] data = FileUtil.inputStreamToByte(stream);
        //文件的下载
        FileDownload.fileDownload(response, data, fileName);
    }

inputStream转byte[]

        /**
	 * InputStream转byte[]
	 * @param is
	 * @return
	 * @throws IOException
	 */
        public static byte[] inputStreamToByte(InputStream is) throws IOException {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
	    int len = 0;
	    byte[] buffer = new byte[1024];
	    while ((len = is.read(buffer)) != -1) {
		byteArrayOutputStream.write(buffer,0, len);
	    }
	    byte[] data = byteArrayOutputStream.toByteArray();
	    is.close();
	    return data;
        }

文件的下载

        /**
	 * Jackrabbit库中文件的下载
	 * @param response
	 * @param data
	 * @param fileName
	 * @throws Exception
	 */
	public static void fileDownload(final HttpServletResponse response, byte[] data, String fileName) throws Exception{
		fileName = URLEncoder.encode(fileName, "UTF-8");
		response.reset();
		response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
		response.addHeader("Content-Length", "" + data.length);
		response.setContentType("application/octet-stream;charset=UTF-8");
		OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
		outputStream.write(data);
		outputStream.flush();
		outputStream.close();
		response.flushBuffer();
	}

猜你喜欢

转载自blog.csdn.net/liujun_for_java/article/details/83016811