【问题标题】:Uploading BLOB to DB using JPA(REST)使用 JPA(REST) 将 BLOB 上传到数据库
【发布时间】:2016-04-20 21:26:04
【问题描述】:

我想从文件资源管理器上传 BLOB,但我对上传 Blob 有点陌生,尤其是在使用 JPA(Java Persistance API) 时。

我想我会向您展示我的一些代码,看看您是否可以给我任何朝着正确方向发展的想法。

我的实体类如下所示

@Entity
@Table(name = "exampletable")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Blob1337.findByTestBlob", query = "SELECT e FROM Blob1337 e WHERE e.testBlob = :testBlob")})

@Column(name = "test_blob")
private Integer testBlob;

public Integer getTestBlob() {
return testBlob;
}

public void setTestBlob(Integer testBlob) {
    this.testBlob = testBlob;
}

如您所见,我不确定这里的 BLOB 使用什么,所以现在它是一个整数。

我的外观是这样的:

@PUT
@Path("{id}")
@Consumes({"application/json"})
public void edit(@PathParam("id") Integer id, Blob1337 entity) {

    Blob1337 entityToMerge = find(id);

    if (entity.getTestBlob() != null) {
        entityToMerge.setTestBlob(entity.getTestBlob());
}
    super.edit(entityToMerge);

}

如何让我的外观和实体类知道这是一个 BLOB?我希望能够通过 ajax 帖子上传此文档,如果我是正确的,这应该是非常基本的。

谢谢!非常感谢任何帮助!

【问题讨论】:

  • 为什么你的testBlobInteger 而不是byte[]string
  • @Mikey 这就是我要找的,用什么来代替整数。如果需要,如何处理它,在下面发布的外观中。我应该使用某种输入流还是什么?
  • 对于门面:File Uploadbyte[] 为您的 blob testBlob 应该没问题。
  • @Mikey 谢谢,我会继续寻找上传到数据库的示例,忘记提及了。

标签: java jpa blob


【解决方案1】:

我终于设法通过 rest/ajax 上传了一个 blob

Facade 应该看起来像这样(这需要一个 blob 并将其流式传输到 DB):

    @POST
    @Path("upload/{id}")
    @Consumes({"application/x-www-form-urlencoded", "multipart/form-data"})

    public void addBlob(@PathParam("id") Integer id, @FormDataParam("file") InputStream uploadedInputStream) throws IOException {
        E24ClientTemp entityToMerge = find(id);
        try {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            int read = 0;
            byte[] bytes = new byte[1024];
            while ((read = uploadedInputStream.read(bytes)) != -1) {
                out.write(bytes, 0, read);
            }
            entityToMerge.setTestBlob(out.toByteArray());
            super.edit(entityToMerge);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

而不是上面问题中发布的 blob 的 integer,我使用带有 @Lob 注释的 byte[]

像这样:

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

奖励,对于未来的访问者 - 这是 Ajax 在这种情况下的外观示例:

    $(".uploadDocumentGeneral").on("click", function (evt) {
    IdToEdit = $(this).closest('tr').siblings().find('p.important').text();
    var url = "http://localhost:10110/MavenProject/api123/General123/upload/"+IdToEdit;
    evt.preventDefault();

    var documentData = new FormData();
    documentData.append('file', $('input#file.findDocumentOnboarding')[0].files[0]);
    $.ajax({
        url: url,
        type: 'POST',
        data: documentData,
        cache: false,
        contentType: false,
        processData: false,
        success: function (response) {
            alert("Document uploaded successfully.");
        }
    });

    return false;
});

【讨论】:

    猜你喜欢
    • 2016-12-30
    • 2016-05-26
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 2012-02-18
    • 2019-09-14
    • 2016-10-07
    • 1970-01-01
    相关资源
    最近更新 更多