我只想简单问一下,当Spring Boot Web应用程序的JPA在数据库中保存数据或BLOB(使用@LOB)或字节数组数据时,在数据库中保存图像的真正形式是什么?它是将整个字节数据保存在数据库中,还是只保存字节数组对象的引用或地址,实际上是将其保存到系统的文件空间中。
我想专门询问Spring启动JPA存储库。请解释一下。如果有任何演示示例进行测试,请提供
它将保存数据库中的所有字节,但不会将其导出到文件系统并保存目录。你必须在代码中明确地做这一部分。
为了直接回答这个问题,内容被存储在数据库中。这对你可能有用,也可能没用。正如@dgarceran提到的,有一堆利弊。无论哪种方式,我都建议你看一看Spring的内容。
这个项目提供了内容/BLOB的抽象。它是非结构化数据,就像Spring Data是结构化数据一样。它有支持JPA(BLOB)、文件系统、Mongo的GridFS和S3的模块。无论您选择哪个模块,它都将使您不必编写像@Ph03n1x提供的任何样板代码。
使用Spring Content,您只需创建一个< code>ContentStore接口,Spring Content将为您提供实现和控制器。该实现是高效的,因为它将在客户机和数据库之间传输内容(而不是像Ph03n1x的例子那样将整个文件加载到内存中)。这种抽象还使得以后在需要时更改存储模型变得容易。
这里有入门指南,这里有视频教程
HTH
转到该存储库并转到< code > display-image-from-db 分支。基本方法如下:
>
在实体中,您拥有:
@Lob
private Byte[] image;
图像控制器。java
-通过多部分文件获取图像
@PostMapping("recipe/{id}/image")
public String handleImagePost(@PathVariable String id, @RequestParam("imagefile") MultipartFile file){
imageService.saveImageFile(Long.valueOf(id), file);
return "redirect:/recipe/" + id + "/show";
}
调用< code>imageService
以保存图像,并将< code>file作为参数传递。
该服务基本上将图像内容复制到字节数组,最后将此字节数组分配给实体。
@Override
@Transactional
public void saveImageFile(Long recipeId, MultipartFile file) {
try {
Recipe recipe = recipeRepository.findById(recipeId).get();
Byte[] byteObjects = new Byte[file.getBytes().length];
int i = 0;
for (byte b : file.getBytes()){
byteObjects[i++] = b;
}
recipe.setImage(byteObjects);
recipeRepository.save(recipe);
} catch (IOException e) {
//todo handle better
log.error("Error occurred", e);
e.printStackTrace();
}
}
对于完整的源代码去回购,这肯定会有所帮助。然而,我强烈建议将文件存储在磁盘上,而不是数据库中。数据库应该只存储文件的路径。对于这样的解决方案,这里有一个例子:链接
问题内容: 在我的应用程序中,我在div中有一个图像,一个按钮。 我想旋转显示的图像,并在使用jquery单击按钮时保存旋转的图像。 我已经使用了代码: http://code.google.com/p/jquery-rotate/ 和jQuery代码: html代码: 当我使用上述代码时,有两个图像,一个是旧图像,另一个是旋转图像。 在这里我想旋转相同的图像并仅显示旋转的图像。并将旋转的图像保存
问题内容: 我刚刚使用Python图像库(PIL)进行了一些图像处理,这是我之前发现的用于执行图像的傅立叶变换的文章,但是我无法使用save函数。整个代码运行良好,但不会保存生成的图像: 我得到的错误如下: 如何使用Pythons PIL保存图像? 问题答案: 已解决有关文件扩展名的错误,您可以使用(不带点)或将输出名称与扩展名一起传递。现在要处理该错误,您需要在频域中适当地修改数据以将其保存为整
问题内容: 我正在从UI发送对象。将使用对现有子项的引用来创建该对象。 这是这种关系的简单说明。 保存该对象时,Hibernate给我“ org.hibernate.TransientPropertyValueException:对象引用了一个未保存的瞬态实例”。 我根本不需要改变孩子,所以不必拯救孩子。只需要将孩子的ID保存在父母的表中。 我尝试使用一些CascadeType,但没有一个起作用。
我试图将字节保存为图像,但似乎不起作用。 以下是我尝试过的: 但我得到一个错误,说它不能写模式RGBA为JPEG,所以我猜这个方法只适用于PNG?如果是这样的话,有没有其他方法来处理jpeg图像?
问题内容: 当我尝试保存顶级实体(使用JPA)时,我是否需要从数据库中重新获取ManyToOne映射实体并进行设置,还是不能仅设置(ManyToOne映射实体的ID并保存顶级实体?)它抛出的实体:org.hibernate.TransientObjectException: 我们正在使用的表结构: (这两个类都具有用于所有字段的setter和getter方法以及默认构造函数,该构造函数以主键作为参
我创建了一个简单的应用程序,裁剪图像。现在我想保存这个图像到消防基地。 如何将此图像保存到Firebase。我尝试了很多教程,但都没有成功。请用简单的代码验证。