2

如何将 Part 转换为 Blob,以便将其存储在 MySQL 中?这是一个图像。谢谢

我的表格

<h:form id="form" enctype="multipart/form-data">
        <h:messages/>
        <h:panelGrid columns="2">
            <h:outputText value="File:"/>
            <h:inputFile id="file" value="#{uploadPage.uploadedFile}"/>
        </h:panelGrid>
        <br/><br/>
        <h:commandButton value="Upload File" action="#{uploadPage.uploadFile}"/>
</h:form>

我的豆子

@Named
@ViewScoped
public class UploadPage {       
    private Part uploadedFile; 

    public void uploadFile(){
    }
}
4

1 回答 1

9

SQL 数据库 BLOB 类型在 Java 中表示为byte[]. 这在 JPA 中被进一步注释为@Lob. 因此,您的模型基本上需要如下所示:

@Entity
public class SomeEntity {

    @Lob
    private byte[] image;

    // ...
}

至于处理Part,因此您基本上需要将其读InputStreambyte[]. 您可以InputStream#readAllBytes()为此使用:

InputStream input = uploadedFile.getInputStream();
byte[] image = input.readAllBytes();
someEntity.setImage(image);
// ...
entityManager.persist(someEntity);

或者,如果您还没有使用 Java 9,那么请前往将 InputStream 转换为 Java中的字节数组,以获取将 an 读InputStreambyte[].

于 2013-10-02T14:17:00.227 回答