java - 从图像 URL 将图像保存到 MySql (Spring JPA Hibernate)

标签 java mysql spring hibernate jpa

我正在工作 Spring JPA Hibernate 项目,想要将图像从 Image Url 保存到 Mysql 数据库。我正在传递订单 DTO 数据以及从 Rest 服务获取的图像 URL。如何将图像 url 作为图像保存到数据库。我认为我们必须首先从 Url 获取图像。请解决这个问题。

订单DO.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);
    }

最佳答案

您可以在Rest Service中将图像url转换为数据byte[]图像,然后再保存。

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;
    }

关于java - 从图像 URL 将图像保存到 MySql (Spring JPA Hibernate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53097013/

相关文章:

java - 在哪里以及如何处理 spring+hibernate 异常?

java - 如何控制 UrlPathHelper#getOriginatingRequestUri

java - 使用 shell 命令传递 Python/JAVA/Perl 选项

php - 如何在 Laravel Query Builder/MySQL Spatial 包中按距离对查询结果进行排序?

mysql - 我的触发语句有问题吗?

mysql - 比较多个元组的 SQL 查询 (mysql)

java - 在 Tasklet 实现上添加可跳过的异常类

java - 如何使用 Selenium 框架从受用户名和密码保护的站点下载文件?

java - 创建Session时getCurrentSession返回null

java - 我可以使用 REST Web 服务和 Spring Boot 将 servlet 中的应用程序转换为 Spring 吗?