如何在java中获取数据库中的svg
Posted
技术标签:
【中文标题】如何在java中获取数据库中的svg【英文标题】:How to get svg in database injava 【发布时间】:2021-09-06 16:48:13 【问题描述】:我有 1 个问题。我将 SVG 图像作为二进制文件保存在数据库中。现在,我想下载它而不转换为base64,有什么办法吗?谢谢。
【问题讨论】:
欢迎来到***。你的问题有几个问题,很难回答。 1)你没有提供任何细节:你使用什么样的数据库?你如何访问你的数据库(你使用休眠还是直接访问)?你用的是什么版本的java? ... 2)您已经尝试过什么?您没有提供任何源代码。 3)不要使用不相关的标签!你为什么用Spring
和PDFBox
标记你的问题?请提供更多详细信息或删除标签!
【参考方案1】:
基本上,这意味着从数据库中获取BLOB
对象。
我会按照这种方法直接在浏览器中显示它:
@RestController
public class ImageController
@GetMapping(value = "/img-test", produces = "image/svg+xml")
public byte[] getImg() throws IOException
// retrieve your image from the DB
File imgFile = new File("C:\\Users\\USR\\Desktop\\img.svg");
InputStream inp = new DataInputStream(new FileInputStream(imgFile));
return inp.readAllBytes(); // This is a Java 9 specific convertion
使用这种方法,您不会更改 BLOB
图像上的任何内容。你拿走它并按原样返回,array
和 byte
s。您可以直接在浏览器中显示或将其嵌入 html 文件中的某个位置。
这里主要是MIME
类型:image/svg+xml
如果您使用的是旧版 Java,请检查 this question 以了解 InputStream
对象到 byte
数组的转换。
通过这种方法,您可以下载文件:
@GetMapping("download-img")
public ResponseEntity downloadImg() throws IOException
// Get the file from the DB...
File imgFile = new File("C:\\Users\\USR\\Desktop\\img.svg");
InputStream inp = new DataInputStream(new FileInputStream(imgFile));
//Dynamically change the File Name here
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"img.svg\"")
.body(inp.readAllBytes());
【讨论】:
我可以获取字节,但我想要的输出是 svg 图像。 是在浏览器中显示还是下载? @gin 我用关于在浏览器中显示它的正确实现更新了答案。我测试了它,它可以工作......祝你好运! 我必须把它拿出来用 pdfbox 绘制 pdf 文件。对我来说真的很难 那么请说清楚一点,我花了时间和精力给你带来了一些东西......你说你想要一个SVG
图像,你明白了......你必须使用现在逻辑将此图像与 pdfbox 一起使用。您可以将文件保存在临时文件夹中并从那里访问它们。或者您可以将图像输入为字节数组,应该可以使用 pdf 库。以上是关于如何在java中获取数据库中的svg的主要内容,如果未能解决你的问题,请参考以下文章
如何在 IE 11 中的 Image.load 上获取 SVG 的宽度和高度
如何从另一个数组中的数组中获取数据,该数组在 Java 中存储值?