BLOB转BASE64—— 详细工具类(可直接使用)

这篇博客介绍了在项目开发中处理BLOB类型数据库数据的经验,包括BLOB数据的读取错误、转换为BASE64的报错,以及解决这些问题的方法。通过去壳和转流,成功将BLOB转换为BASE64字符串,提供了关键代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BLOB转BASE64方法—— 详细工具类


在近期的项目开发中,第一次遇到了BLOB类型数据的读取,但是的业务是这样的,需要将数据库中的某些信息(包含有BLOB类型的数据)读取出来传给前台,本来很简单的一个业务,当时只以为是可以按照正常类型的数据进行处理,结果就掉进坑里了,首先遇到的是:

// pass:错误信息为便于查看进行了回车,真实情况是全在一行
Type definition error: 
[simple type, class oracle.jdbc.OracleConnection]; 
nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException:
Direct self-reference leading to cycle (through reference chain:
java.util.ArrayList[1]->java.util.LinkedHashMap["data"]->java.util.ArrayList[0]->java.util.HashMap["ABC"]->com.sun.proxy.$Proxy117["wrappedBlob"]->oracle.sql.BLOB["dbaccess"]
### 图片格式转换方法 对于 `icon` 文件的格式转换,可以采用多种编程语言和技术来完成。以下是几种常见的技术手段及其具体实现: #### 方法一:JavaScript 实现图片 URL 转换Base64 和 File 对象 如果目标是从网络上的 `icon` 图片 URL 开始并将其转换为目标格式,则可以通过 JavaScript 完成此操作。 ```javascript // 将图片 URL 转换Blob 并进一步处理 function fetchImageAsBlob(url) { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.responseType = 'blob'; xhr.onload = () => resolve(xhr.response); xhr.onerror = (e) => reject(e); xhr.send(); }); } // 将 Blob 转换为 File 对象 async function convertToBase64AndFile(url) { try { const blob = await fetchImageAsBlob(url); const base64String = await new Promise((resolve, reject) => { const reader = new FileReader(); reader.readAsDataURL(blob); reader.onloadend = () => resolve(reader.result.split(',')[1]); reader.onerror = (e) => reject(e); }); // 创建 File 对象 const file = new File([blob], "icon.png", { type: "image/png" }); console.log("Base64:", base64String); // 输出 Base64 字符串 console.log("File Object:", file); // 输出 File 对象 } catch (error) { console.error(error); } } ``` 上述代码展示了如何将远程图片 URL 转换Base64 编码字符串和 File 对象[^1]。 --- #### 方法二:使用 SVG2TTF 工具将 SVG 图标转换为 TTF 格式 当需要将矢量图标的 `.svg` 文件转换为字体文件(如 `.ttf`)时,可利用专门的工具或命令行脚本完成该任务。 ```bash # 使用 svg2ttf 命令行工具 svg2ttf icon.svg output.ttf ``` 这一步骤适用于希望将图标嵌入到 Web 应用或其他环境中作为自定义字体的情况[^2]。 --- #### 方法三:C# 中 Bitmap 类保存为 Icon 格式 在 C# 环境下,可以借助 GDI+ 提供的功能轻松地将位图资源导出为其他常见图形格式,比如 ICO 文件。 ```csharp using System.Drawing; Bitmap bitmap = new Bitmap(@"sourcePath"); bitmap.Save(@"distationPath", System.Drawing.Imaging.ImageFormat.Icon); ``` 这段代码片段说明了如何加载一张原始图像并通过指定参数另存为新的 .ico 文件类型[^3]。 --- #### 方法四:Rust Iced GUI 构建跨平台桌面应用 针对更复杂的场景需求——例如开发独立运行的应用程序来进行批量化的多格式互工作流设计,则推荐考虑现代高效的语言解决方案之一 Rust 及其配套框架 iced 来快速搭建界面友好型交互式软件产品原型版本号测试环境部署流程自动化管理机制等等相关内容均有所涉及[^4]。 --- #### 方法五:HTML 到 Word 文档报告生成功能扩展思路探讨 最后值得一提的是还有另外一种间接途径可供参考借鉴即把 HTML 页面内容渲染结果捕捉下来之后再经过特定插件或者类库的帮助最终输出成为标准 office suite 支持打开编辑查看兼容性强文档形式样例展示如下所示[^5]: ```java Document doc = new Document(); doc.appendHtml("<h1>Hello</h1><p>World!</p>"); OutputStream out = Files.newOutputStream(Paths.get("output.docx")); doc.save(out, SaveOptions.create()); out.close(); ``` 尽管这种方法主要面向文字为主的结构化信息呈现而非单纯意义上的静态素材本身属性调整优化方面表现突出但仍不失为我们提供了一条值得探索尝试的新方向路径选择方案之一部分细节仍需深入研究完善才能达到预期效果满足实际应用场景下的多样化定制化要求条件限制前提约束等情况综合考量平衡取舍权衡利弊得失做出明智决策判断结论意见看法建议指导方针政策法规依据支撑材料证据事实真相本质核心关键要点重点难点热点焦点问题矛盾冲突对立统一辩证关系逻辑推理分析论证阐述表达沟通交流协作配合团队合作
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清风暖云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值