從Jackrabbit庫中下載檔案到web(涉及到inputStream轉byte[])
阿新 • • 發佈:2018-12-14
專案中用到了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(); }