java blob 下载,java-cratedb download blob

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

if (req.getParameter("lsh") == null || req.getParameter("name") == null || req.getParameter("aaddr") == null) {

throw new RuntimeException("Necessary Arg Missing");

}

String lsh= req.getParameter("lsh");

String name= req.getParameter("name");

String addr= req.getParameter("addr");

String digest = "6f9ec32c2a08a5527f6932f9c9df90dfc1a0be85";//192.168.17.232:4300

String filename = lsh + "_" + name+ "_" + addr;

String surfix = ".pdf";

String contentType = "application/octet-stream";

OutputStream out = null;

try {

String sql = "SELECT * FROM " + table + " WHERE name = " + name+ " AND addr = " + addr;

JSONObject reqJson = new JSONObject();

reqJson.put("stmt", sql);

JSONObject respJson = executeRequest(reqJson);

if (respJson.getIntValue("code") == -1) {

throw new RuntimeException("DonwloadInovice Error: Get digest from " + table + " occured error, please try later");

}

JSONArray respArr = respJson.getJSONArray("msg");

JSONObject data = respArr.getJSONObject(0);

digest = data.getString("pdfdigest");// To-do,这里需要确认digest在数据库中存储到哪个字段了

InputStream is = downloadPdf(digest);

resp.setHeader("Content-Type", contentType);

resp.setHeader("Content-Transfer-Encoding", "binary");

resp.setHeader("Cache-Control","must-revalidate");

resp.setCharacterEncoding("UTF-8");

resp.setHeader("Content-Disposition", "attachment;filename=" + filename + surfix);

int read = -1;

byte[] bytes = new byte[1024];

out = resp.getOutputStream();

while((read = is.read(bytes)) != -1) {

out.write(bytes, 0, read);

}

}catch (Exception e) {

e.printStackTrace();

contentType = "text/html";

resp.setHeader("Content-Type", contentType);

String err = "downloadInvoice occured err, err message:" + e.getMessage();

out.write(err.getBytes());

} finally {

if (null != out) {

out.close();

}

}

}

private InputStream downloadPdf(String digest){

try {

HttpGet get = new HttpGet(blobUri(digest));

CloseableHttpResponse response = httpClient.execute(get);

InputStream is = response.getEntity().getContent();

return is;

}catch (Exception e){

e.printStackTrace();

}

return null;

}

private String blobResourceUri(String index, String digest) {

return String.format(Locale.ENGLISH, "%s/%s", index, digest);

}

private String blobUri(String digest) {

return String.format(Locale.ENGLISH,

"http://%s:%s/_blobs/%s", url, port, blobResourceUri(pdfblob, digest));

}

private JSONObject executeRequest(JSONObject jsonObject) {

JSONObject respBO = new JSONObject();

String pdfurl = "http://" + url + ":" + port + "/_sql?pretty";

System.out.println(pdfurl);

System.out.println(jsonObject);

try {

HttpPost httpPost = new HttpPost(pdfurl);

HTTPResp resp = client.post(pdfurl, jsonObject);

if (resp == null || resp.getRespCode(-1) != 200) {

int errorCode = resp.getRespJson().getJSONObject("error").getIntValue("code");

String errorMsg = resp.getRespJson().getJSONObject("error").getString("message");

logger.error(" ----- execute failed :" + resp.getRespMsg());

respBO.put("code", -1);

respBO.put("msg", resp.getRespMsg());

} else {

logger.info(" ----- execute success");

JSONObject respJson = resp.getRespJson();

JSONArray respArray = reformatData(respJson);

respBO.put("code", 0);

respBO.put("msg", respArray);

}

}catch (Exception e) {

e.printStackTrace();

logger.error(e.getMessage(), e);

respBO.put("code", -1);

respBO.put("msg", e.getMessage());

}

return respBO;

}

private JSONArray reformatData(JSONObject arg) {

JSONArray rows = arg.getJSONArray("rows");

JSONArray cols = arg.getJSONArray("cols");

JSONArray array = new JSONArray();

for (int i = 0; i < rows.size(); i++) {

JSONArray arr = rows.getJSONArray(i);

JSONObject one = new JSONObject();

for (int j = 0; j < arr.size(); j ++) {

Object value = arr.get(j);

String key = cols.getString(j);

if (value == null) value = "null";//若是没有值,则赋值为null

one.put(key, value);

}

array.add(one);

}

return array;

}

如果下载的文件有问题,那可能是上传的时候就有问题,可以通过在浏览器输入访问地址,看能否获取到相应的文件来检查,官网样例:

sh$ curl -isS '127.0.0.1:4200/_blobs/myblobs/e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e'

HTTP/1.1 404 Not Found

Content-Length: 0

官网地址:https://crate.io/docs/reference/blob.html

当你输入的digest和url时就能在浏览器上看到你的blob文件,如果看不到,那说明存储到cratedb的文件是有问题的

提示:一定要确认存到cratedb的blob文件是可用的,否则白忙活了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值