database - 如何在 Flutter+Spring Boot+PostgreSQL+Heroku 结构中发送和存储图像?
问题描述
我正在开发一个带有Flutter
框架的移动应用程序。
在后端 API 方面,我使用Spring Boot
框架并将其部署到Heroku
(免费计划)。
在数据库方面,我PostgreSQL
在Heroku
.
在处理图像之前一切正常。当我需要将图像发送到服务器并存储它时,我感到很困惑。它的最佳实践是什么?经过一番搜索,我看到了两个选项。这些是:
第一个选项
- 在
Flutter
侧面,从用户那里获取图像 - 在
Flutter
侧面,将图像转换为BASE64
字符串格式。 - 在
Flutter
侧面,POST
它作为JSON
后端的对象。 - 在
Spring Boot
侧面,获取BASE64
字符串并将其存储到PostgreSQL
数据库中。
第二种选择
- 在
Flutter
侧面,从用户那里获取图像 - 在
Flutter
侧面,将图像转换为BASE64
字符串格式。 - 在
Flutter
侧面,POST
它作为JSON
后端的对象。 - 在
Spring Boot
side中,获取BASE64
字符串并将其转换为真实的图像文件; - 在
Spring Boot
侧面,将实际的图像文件保存到主机的文件系统中,并将图像的路径存储到PostgreSQL
数据库中。(但是 Heroku 不允许在其文件系统上写入)(即使可以在其文件系统上写入,每次新部署,图像都会消失)
如果我选择第二个选项,我应该怎么做才能解决文件系统中的保存图像Heroku
?
我应该使用哪个选项?
还有其他好的选择吗?
解决方案
我觉得你应该:
- 在 Flutter 应用中从用户那里获取图像;
- 将图片转换为base64格式;
- 通过rest api以json格式发送到后端;
- 在spring应用程序中将字符串转换为blob数据并保存在数据库中;
当您需要阅读时:
- 从数据库中检索 blob;
- 转换为字符串;
- 发送到flutter;
- 转换为真实图像;
我通常用这种方法来面对这个要求,而且效果很好。我在下面写了一个简单的函数,从/到你可以使用的 blob/string
到Blob
public static Blob toBlob(String s) throws SQLException {
if (Objects.nonNull(s)) {
return new SerialBlob(s.getBytes(StandardCharsets.UTF_8));
} else return null;
}
public static String toString(Blob b) throws SQLException {
if (Objects.nonNull(b)) {
return new String(b.getBytes(1L, (int) b.length()), StandardCharsets.UTF_8);
} else return null;
}
推荐阅读
- javascript - 如何将按钮克隆父 div 到正文
- javascript - 为什么从我的笔记本电脑上的节点服务器发送多个 http 请求会扭曲互联网访问
- reactjs - 如何在 Flatlish 中随机选择项目?
- java - 在Java中为什么数字操作的结果与变量操作不同
- firebase - 写入 Firebase Firestore 被拒绝 - Flutter
- c# - 在 C# 中使用 Process.Start
- powershell - Powershell不显示RSS提要
- css - CSS 类链接 vs 逗号分隔 vs 空格分隔语法
- android - Kitkat 和棒棒糖设备的低功耗蓝牙 (BLE) 设备连接问题
- python-3.x - twython 无法获取 $EURUSD 的数据