1

実在物:

@Lob
@Column(name = "logo")
private byte[] logo;

形:

<h:form enctype="multipart/form-data">  
    <p:messages showDetail="true"/>  

    <p:fileUpload value="#{testController.file}" 
                  update="messages"  
                  mode="simple"
                  sizeLimit="1048576"   
                  allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/>  

    <p:growl id="messages" showDetail="true"/>  

    <p:commandButton value="Submit" ajax="false"  
                     actionListener="#{testController.upload}"/>  
</h:form>  

豆:

private testEntity current;
private UploadedFile file;

public UploadedFile getFile() {
    return file;
}

public void upload() {
    if (file != null) {
        try {
            byte[] data = file.getContents();
            current.setLogo(data);

            getFacade().edit(current);
            JsfUtil.addSuccessMessage("Successful! " + file.getFileName() + " is uploaded.");
        } catch (Exception e) {
        }
    }
}

80kb の画像のようなファイルをアップロードしようとすると、この例外が発生します

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'logo' at row 1

しかし、10kb未満の写真をアップロードすると、コードは機能します。

JSF 2.0、Primefaces 3.5 を使用すると、ほとんどのコードは CRUD を使用して自動生成されます。

4

1 に答える 1

1

問題は、データベースの列が、保存しようとしているものよりも少なく保存されるように設定されていることです。それが切り捨ての意味です。

データベースの列定義をLONGBLOBに変更する必要があります。

于 2013-03-22T06:20:50.883 に答える