java - 从图像 URL 将图像保存到 MySql (Spring JPA Hibernate)
问题描述
我正在工作 Spring JPA Hibernate 项目,并希望将图像从 Image Url 保存到 Mysql 数据库。我正在使用从 Rest Service 获取的图像 URL 传递 Orders DTO 数据。如何将图像 url 作为图像保存到数据库。我认为我们必须首先从 Url 获取图像。请解决这个问题。
OrderDO.java
@Table(name = "ORDER")
public class OrderDO implements Serializable{
@Column(name = "ORDER_NUMBER", nullable = false)
private String orderNumber;
@OneToMany(cascade = CascadeType.ALL, mappedBy="order")
private Set<OrderItemDO> items = new HashSet<>();
}
OrderItemDO.java
@Table(name = "ORDER_ITEM")
public class OrderItemDO implements Serializable{
@Column(name = "PRODUCT_NAME",nullable = false)
private String name;
@Lob
@Column(name = "IMAGE")
private byte[] image;
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="ORDER_ID", referencedColumnName="ID")
private OrderDO order;
}
OrderRepository.java
@Repository
public interface OrderRepository extends CrudRepository<OrderDO, Long>{
public Page<OrderDO> findAll(Pageable pageable);
}
OrderServiceImpl.java
public class OrderServiceImpl {
@Autowired
private ModelMapper modelMapper;
@Autowired
private OrderRepository orderRepository;
private OrderDO map(Order dto) {
OrderDO orderDO = modelMapper.map(dto, OrderDO.class);
Set<OrderItemDO> itemsDO = new HashSet<>();
for(OrderItem item : dto.getItems()) {
OrderItemDO itemDO = map(item);
itemDO.setOrder(orderDO);
itemsDO.add(itemDO);
}
orderDO.setItems(itemsDO);
return orderDO;
}
public OrderItemDO map(OrderItem dto) {
OrderItemDO itemDO = modelMapper.map(dto, OrderItemDO.class);
return itemDO;
}
public Order SaveOrder(Order dto) {
OrderDO entity = this.map(dto);
entity = orderRepository.save(entity);
return this.map(entity);
}
解决方案
您可以在保存之前将图像 url 转换为 Rest Service 中的数据字节 [] 图像。
public static byte[] convertImageByte(URL url) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream is = null;
try {
is = url.openStream ();
byte[] byteChunk = new byte[4096]; // Or whatever size you want to read in at a time.
int n;
while ( (n = is.read(byteChunk)) > 0 ) {
baos.write(byteChunk, 0, n);
}
return byteChunk;
}
catch (IOException e) {
System.err.printf ("Failed while reading bytes from %s: %s", url.toExternalForm(), e.getMessage());
e.printStackTrace ();
// Perform any other exception handling that's appropriate.
}
finally {
if (is != null) { is.close(); }
}
return null;
}
推荐阅读
- r - 我如何在 R 中翻译?
- javascript - Vuex-persist 抛出 Uncaught TypeError: s is not a function
- flutter - 我怎样才能使这个内联
- java - match_parent 和 wrap_content 约束布局的问题
- postgresql - 如何在 PostgreSQL 中合并两个输入记录并相应地插入或更新
- python - 使用 for loop python 遍历两个目录
- flutter - 如何在 Flutter 中实现手动轮播滑块?
- keycloak - 我们可以将 HttpOnly 标志设置为 KEYCLOAK_SESSION cookie 吗?
- c - CreateProcess函数返回的进程ID与任务管理器不同
- aws-lambda - 如何从 AWS Lambda Authorizer 返回 401(“未授权”)