【问题标题】:Image upload by user with Servlet and Hibernate用户使用 Servlet 和 Hibernate 上传图像
【发布时间】:2018-09-23 13:58:56
【问题描述】:

当通过带有图像的表单插入新产品时,图像首先作为 PART 接收,然后转换为 INPUT STREAM,最后转换为 BYTE[] 并插入到数据库中,但数据库中的文件仅显示文件大小几个字节..图像未插入数据库..正在插入一些数据但没有图像..我是新手,请帮忙。用户应该能够从任何地方插入任何图像......

myservlet 页面

    try (PrintWriter out = response.getWriter()) {

        Produkt produkt = new Produkt();
        ProduktDAO produkt_dao = new ProduktDAO();

        if (request.getParameter("submit") != null) {

            SessionFactory session_factory = DatabaseConnection.getSession_factory();
            Session session = session_factory.openSession();
            session.beginTransaction();

            String produkt_kategorie = request.getParameter("produkt_kategorie");
            String produkt_preis = request.getParameter("produkt_preis");
            String produkt_code = request.getParameter("produkt_code");
            String produkt_name = request.getParameter("produkt_name");
            String produkt_einzelheiten = request.getParameter("produkt_einzelheiten");


            Part produkt_bild = request.getPart("produkt_bild");
            InputStream eingang_storm =  produkt_bild.getInputStream();
            byte[] bild_daten = new byte[(int) eingang_storm.read()];

            produkt.setProdukt_kategorie(produkt_kategorie);
            produkt.setProdukt_preis(produkt_preis);
            produkt.setProdukt_code(produkt_code);
            produkt.setProdukt_name(produkt_name);
            produkt.setProdukt_einzelheiten(produkt_einzelheiten);
            produkt.setBild_daten(bild_daten);

            produkt_dao.einfugenProdukt(produkt);
            request.getRequestDispatcher("add_new_product.jsp").forward(request, response);

实体页面

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int product_id;

@Column(name = "produkt_kategorie", nullable = false, length = 500)
private String produkt_kategorie;

@Column(name = "produkt_preis", nullable = false, length = 500)
private String produkt_preis;

@Column(name = "produkt_code", nullable = false, length = 500)
private String produkt_code;

@Column(name = "produkt_name", nullable = false, length = 500)
private String produkt_name;

@Column(name = "produkt_einzelheiten", nullable = false, length = 1500)
private String produkt_einzelheiten;

@Lob
@Column(name = "produkt_bild", nullable = false,columnDefinition = "longblob")
private byte[]  bild_daten;

【问题讨论】:

    标签: java hibernate servlets backend


    【解决方案1】:

    byte[] 转换错误。您使用read 获得InputStream 的第一个字节,并使用它创建一个空的byte[],并将第一个字节的长度转换为int。这毫无意义。

    试试这个:

    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    int nRead;
    byte[] data = new byte[1024];
    while ((nRead = eingang_storm.read(data, 0, data.length)) != -1) {
        buffer.write(data, 0, nRead);
    }
    buffer.flush();
    byte[] bild_daten = buffer.toByteArray();
    

    这会将您的 InputStream 转换为 1K 块到 ByteArrayOutputStream,然后将其复制到字节数组中。

    【讨论】:

      猜你喜欢
      • 2015-01-14
      • 2011-06-25
      • 2012-02-10
      • 1970-01-01
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 2014-02-24
      • 2013-04-06
      相关资源
      最近更新 更多