版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
}