亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將圖像從圖像 URL 保存到 MySql (Spring JPA Hibernate)

將圖像從圖像 URL 保存到 MySql (Spring JPA Hibernate)

30秒到達戰場 2021-12-22 18:49:32
我正在工作 Spring JPA Hibernate 項目并希望將圖像從 Image Url 保存到 Mysql 數據庫。我正在使用從 Rest Service 獲取的圖像 URL 傳遞 Orders DTO 數據。如何將圖像 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<>();}訂單項DO.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;}訂單倉庫.java@Repositorypublic interface OrderRepository extends CrudRepository<OrderDO, Long>{    public Page<OrderDO> findAll(Pageable pageable);    }OrderServiceImpl.javapublic 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);    }
查看完整描述

2 回答

?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

在保存之前,您可以在 Rest Service 中將圖像 url 轉換為數據字節 [] 圖像。


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;

    }


查看完整回答
反對 回復 2021-12-22
?
波斯汪

TA貢獻1811條經驗 獲得超4個贊

好的問題解決了。將圖像 URL 轉換為字節數組的代碼如下。有關此問題的更多答案,請參閱此處


public static byte[] convertImageByte(URL url) throws IOException {

    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    InputStream is = null;

    try {

        is = new BufferedInputStream(url.openStream());

        byte[] byteChunk = new byte[4096];

        int n;

        while ( (n = is.read(byteChunk)) > 0 ) {

            baos.write(byteChunk, 0, n);

        }   

        return baos.toByteArray();

    }

    catch (IOException e) {e.printStackTrace ();}

    finally {

        if (is != null) { is.close(); }

    }

    return null;

}

將 Dto 保存到數據庫時


if(dto.getImageUrl() != null) {             

    try {

    URL imageUrl = new URL(dto.getImageUrl());

    itemDO.setImage(convertImageByte(imageUrl));

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

    entity = orderItemRepository.save(itemDO);

從數據庫中獲取圖像


public byte[] getImageForOrderItem(long itemId) {

    Optional<OrderItemDO> option = orderItemRepository.findById(itemId);

    if(option.isPresent()) {

        OrderItemDO itemDO = option.get();

        if(itemDO.getImage() != null) {

            byte[] image = itemDO.getImage();

            return image;

        }

    }

    return null;

}

通過 Rest API 調用 Image Response


@GetMapping(path="/orderItem/image/{itemId}")

@ResponseStatus(HttpStatus.OK)

public void getImageForOrderItem(@PathVariable("itemId") long itemId, HttpServletResponse response) { 

    byte[] buffer = orderServiceImpl.getImageForOrderItem(itemId);

    if (buffer != null) {

        response.setContentType("image/jpeg");

        try {

            response.getOutputStream().write(buffer);

            response.getOutputStream().flush();

            response.getOutputStream().close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    } 

}


查看完整回答
反對 回復 2021-12-22
  • 2 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號