首页 > 解决方案 > 如何将图像文件上传到数据库

问题描述

我无法将图像文件插入数据库。我可以在控制器部分编写与插入过程相关的代码片段。

我可以使用base64encode图像处理。

我可以将图像定义为byte部件,因为我将图像定义为Blob在数据库部件中。

如果不正确,我该如何处理。

控制器部分

@PostMapping("/saveCustomer") // @RequestMapping(path = "/saveCustomer", method = RequestMethod.POST)
    public String saveCustomer(@ModelAttribute("customer") Customer theCustomer,@RequestParam("image") MultipartFile file) {

        System.out.println("/saveCustomer | File Name : "+file.getName());


        byte[] imageBytes = new byte[(int) file.getSize()];

        try {
            FileInputStream fileInputStream = new FileInputStream(file.getOriginalFilename());
            fileInputStream.read(imageBytes);
            fileInputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        theCustomer.setImage(imageBytes);


        // save the customer using our service
        customerService.saveCustomer(theCustomer);


        return "redirect:/customer/list";
    }

客户类

    public class Customer implements Serializable{

        @Id
        @SequenceGenerator(name="CUSTOMER_SEQ", sequenceName="CUSTOMER_SEQ", allocationSize=1)
        @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CUSTOMER_SEQ")
        @Column(name="ID", nullable = false)
        private int id;

        @Column(name="FIRSTNAME")
        private String firstName;

        @Column(name="LASTNAME")
        private String lastName;

        @Column(name="EMAIL")
        private String email;

        @Column(name="IMAGE")
        private byte[] image;

        @Transient
        private String base64Image;

public byte[] getImage() {
        return image;
    }

    public void setImage(byte[] image) {
        this.image = image;
    }

public String getBase64Image() {
        base64Image = Base64.getEncoder().encodeToString(this.image);
        return base64Image;
    }

    public void setBase64Image(String base64Image) {
        this.base64Image = base64Image;
    }

    ...
    }

html部分

<tr>
    <td>Image:</td>
    <td><input type="file" name="photo" required="required"/>
    </td>
</tr>

标签: spring-mvccontrollerimage-uploading

解决方案


您应该看看名为Spring Content的社区项目。

该项目为 Spring Resources 提供了对各种不同类型存储的抽象。

它提供了一个非常类似于 Spring Data 的编程模型,因此您可以免费获得很多样板实现。例如,无需定义您自己的控制器实现。

这里有入门指南,这里有各种不同数据库的示例。spring-content-jpa 和 spring-content-rest 的组合就足够了。这里也有一个很好的示例答案。


推荐阅读