当前位置: 代码迷 >> 综合 >> 笔记:调用三方接口,接收返回的IO流,以Byte数组形式存入数据库中BLOB类型的字段
  详细解决方案

笔记:调用三方接口,接收返回的IO流,以Byte数组形式存入数据库中BLOB类型的字段

热度:74   发布时间:2024-02-22 04:39:58.0

1.引入工具依赖:

<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version>
</dependency>

2.调用接口接收IO流(这里不写入文件到具体路径)

CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost post = new HttpPost(你的url);
CloseableHttpResponse httpResponse = httpClient.execute(post);
Header[] headers = httpResponse.getHeaders("Content-Disposition");
byte[] buffer = null;
if (headers.length > 0) {Header header = headers[0];String h = header.toString();String filename = h.substring(h.indexOf("filename=") + 9);URLDecoder.decode(filename, "UTF-8");HttpEntity entity = httpResponse.getEntity();if (null != entity) {InputStream is = entity.getContent();ByteArrayOutputStream  fos = new ByteArrayOutputStream ();byte[] b = new byte[2048];int length;while ((length = is.read(b)) > 0) {fos.write(b, 0, length);}is.close();fos.close();buffer = fos.toByteArray();}
}

3.假设pojo类为如下:(此时数据库中字段类型为BLOB)

class file {

       private byte[] fileContent;

}

4.最后file.fileContent(buffer),最后执行Mapper等操作。

注意:buffer这个字段,就是为了将输出的内容,以byte[]的形式存起来,然后存入BLOB类型的字段中

如果是新增一条数据,要先insert into file表 (BLOB类型的字段名)value (empty_blob()),

也就是insert多个值的时候,那个字段的值要先insert为empty_blob()

然后更新时,需要传入的类型为byte[]数组(也就是pojo中的字段类型)

ByteArrayOutputStream 这个流 调用 toByteArray() 后即可 转换为 byte[]。

 

 

 

  相关解决方案