簡體   English   中英

如何在 spring mvc 中為圖像定義 getter 和 setter

[英]How to define getter and setter for an image in spring mvc

我正在嘗試使用 spring mvc 將圖像上傳到 mysql 數據庫。 我能夠插入字符串和 integer 值,但是在上傳圖像時會拋出字段錯誤

代碼:

dao.java 文件:

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.skillsoft.model.Book;

public class BookDao {
    JdbcTemplate template;

    public void setTemplate(JdbcTemplate template) {
        this.template = template;
    }

    public List<Book> getExhibitionDetails() {
        return template.query("select * from ExhibitionDetails", new RowMapper<Book>() {
            public Book mapRow(ResultSet rs, int row) throws SQLException {
                Book book = new Book();
                book.setStudentId(rs.getInt(1));
                book.setName(rs.getString(2));
                book.setProjectName(rs.getString(3));
                book.setPhoto(rs.getBytes(4));
                return book;
            }
        });
    }

    public int save(Book p) {
        String sql = "insert into ExhibitionDetails(StudentId, Name, ProjectName, Photo) values(" + p.getStudentId() + ",'"
                + p.getName() + "','" + p.getProjectName() + "','" + p.getPhoto() + "')" ;
        return template.update(sql);
    }

使用 p.getPhoto() 獲取圖像並將其插入數據庫是否正確? 如果不是還有什么選擇

Model class:


package com.skillsoft.model;

import java.util.List;

import org.springframework.web.multipart.MultipartFile;

public class Book {

    private int studentId;
    private String name;
    private String projectName;
    private byte[] photo;

    public byte[] getPhoto() {
        return photo;
    }

    public void setPhoto(byte[] photo) {
        this.photo = photo;
    }

    public String getProjectName() {
        return projectName;
    }

    public void setProjectName(String projectName) {
        this.projectName = projectName;
    }

    public int getStudentId() {
        return studentId;
    }

    public void setStudentId(int studentId) {
        this.studentId = studentId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

Controller:

導入 com.skillsoft.dao.BookDao; 導入 com.skillsoft.model.Book;

@Controller public class BookController {

@Autowired
BookDao bookdao;


@RequestMapping("/viewbook")
public String viewbook(Model m) {
    List<Book> list = bookdao.getExhibitionDetails();
    m.addAttribute("list", list);
    return "viewbook";
}


@RequestMapping("/addform")
public String showform(Model m) {
    m.addAttribute("command", new Book());
    return "addform";
}


@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(@ModelAttribute("book") Book book) {
    bookdao.save(book);
    return "redirect:/viewbook";
}
Error:

Field error in object 'book' on field 'photo': rejected value [org.springframework.web.multipart.commons.CommonsMultipartFile@2e5c8975]; codes [typeMismatch.book.photo,typeMismatch.photo,typeMismatch.[B,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [book.photo,photo]; arguments []; default message [photo]]; default message [Failed to convert property value of type 'org.springframework.web.multipart.commons.CommonsMultipartFile' to required type 'byte[]' for property 'photo'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type 'org.springframework.web.multipart.commons.CommonsMultipartFile' to required type 'byte' for property 'photo[0]': PropertyEditor [org.springframework.beans.propertyeditors.CustomNumberEditor] returned inappropriate value of type 'org.springframework.web.multipart.commons.CommonsMultipartFile']]

謝謝。 從錯誤消息來看,您似乎正在將org.springframework.web.multipart.commons.CommonsMultipartFile類型的變量傳遞給setPhoto() ,它需要byte[] CommonsMultipartFile有一個getBytes()方法,因此您可以嘗試調用它來獲取 model 期望的字節數組。

關於我之前的評論:我的直覺是,將圖像存儲在關系數據庫列中可能不是正確的設計選擇。 如果您打算在 web 頁面中顯示這些圖像,那么這幾乎肯定不是正確的設計選擇。 您可以考慮將上傳的文件存儲在文件系統(或 S3 等雲服務)上,然后將路徑或 URL 存儲到 model 中的文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM