無法使用 Spring Boot REST 服務將 BLOB 保存到數據庫

恍惚癮君子

我嘗試從前端發送一個包含 BLOB 變量的 Json 對象:

imageToBlob(file).then(result =>{

              const imageData={blobData: result} //JSON DATA
                   
              axios.post('http://localhost:8080/saveImage', imageData)
                        .then();
                })

當我記錄結果時,瀏覽器會打印:

Blob {size: 67386, type: 'image/png'}
size: 67386
type: "image/png"
[[Prototype]]: Blob

當我嘗試將其保存到 MySQL 數據庫時,我在 Spring 中收到此錯誤:

[nio-8080-exec-9] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type `[B` from Object value (token `JsonToken.START_OBJECT`); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `[B` from Object value (token `JsonToken.START_OBJECT`)<EOL> at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 13] (through reference chain: com.example.pictureprojecttestbackend.entity.Picture["blobData"])]

實體:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Picture {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    Integer id;

    @Lob
    byte[] blobData;
}

發布請求:

@RestController
public class PictureController {

    @Autowired
    PictureRepository pictureRepository;

    @PostMapping(value = "/saveImage", consumes = "application/json")
    public void addImage(@RequestBody Picture picture){

        pictureRepository.save(picture);
    }
}

我究竟做錯了什麼?我發送了錯誤的 Json 結構還是關於實體的問題?

帕納吉奧蒂斯·布吉烏科斯

文件是通常無法輕易轉換為 JSON 的字節數組。這是您嘗試執行的操作,但在此轉換過程中失敗。

你最好用content-type "multipart/form-data"

嘗試以下

@Lob
@Type(type = "org.hibernate.type.ImageType")
byte[] blobData;

然後

    @PostMapping(value = "/saveImage")
    public void addImage(@RequestParam("file") MultipartFile file){

      Picture picture = new Picture();
      picture.setBlobData(file.getBytes());

      pictureRepository.save(picture);
    }

然後調整你的前端

imageToBlob(file).then(result =>{

              var file = result;
              var formData = new FormData();
              formData.append("file", file);
                    
              axios.post('http://localhost:8080/saveImage', formData,  
                { headers: { 'Content-Type': 'multipart/form-data' } });
                    .then();
    });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Rest和Spring Boot将阿拉伯字符保存到数据库中

無法將數據從反應發送到快遞服務器

無法從 Web 服務在數據庫中創建用戶和更新用戶

如何使用 C++ 套接字編程將數據並發發送到多個服務器?

無法使用組合框架將自定義數據保存到 CoreData 中

使用 IHttpFactory 注入服務時,無法在 Blazor 服務器中找到構造函數

無法將 POST 變量插入數據庫

設計模型無法保存到數據庫中

如何使用 Spring Boot 和 JPA Repository 立即將數據保存到數據庫

在 grails 4.0.3 中使用來自兔子 mq 消費者的數據將記錄保存在服務層的數據庫中的問題

如何使用 Spring Boot 顯示從數據庫接收的 blob 圖像

無法使用 Android 將數據寫入 Firebase 數據庫時如何獲取錯誤消息

如何使用數據工廠將數據從 Azure Blob 存儲增量加載到 Azure SQL 數據庫?

應用程序退出時,如何使用協程將數據保存到 Web 服務器

如何將 List<Double> 保存到 Room 數據庫?

無法將選中的值插入數據庫

如何使用 C# worker 服務將正確的配置數據推送到 swarm/kubernetes?

將 Maximo 數據插入另一個數據庫服務器

使用輔助 h2 數據庫在 Spring Boot 中測試 API

無法使用節點服務器向我的 mariadb 數據庫發出請求

如何避免使用 django rest 框架將數據存儲在數據庫中

是否可以使用 IF 語句從數據庫中獲取數據並將其保存到 String 中?

無法將數據庫服務器連接到指定端口

無法將 Jupyterlab 中的數據框保存到 CSV/Excel

Spring Data Jpa Repository 不將實體保存到數據庫

將 JPA @Enumerated 值保存到數據庫中

使用 Spring Boot 為文件名中包含空格的靜態文件提供服務

在 Spring Boot 中將 H2 數據庫更改為 SQL 數據庫

雪花無服務器任務錯誤並顯示消息無法執行任務,必須將任務倉庫的使用權限授予所有者角色