1. 程式人生 > >從Jackrabbit庫中下載檔案到web(涉及到inputStream轉byte[])

從Jackrabbit庫中下載檔案到web(涉及到inputStream轉byte[])

專案中用到了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();
	}