Загрузить файл с другим объектом в той же форме в Spring - PullRequest
0 голосов
/ 08 ноября 2018

Я хочу загрузить файл в базу данных с отношениями OneToMany с другим объектом. Я использую Spring 4 с Thymeleaf. У меня есть два объекта: изображение и магазин.

Магазин:

@Entity
@Table(name = "store")
public class Store {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id; 
    private String email;
    private String nombre;
    @ManyToOne
    @JoinColumn(name="id_image")
    private Image im;

//public getters and setters

Изображение:

@Entity
@Table(name = "images")
public class Image {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String name;
    private byte[] image;
   @OneToMany(mappedBy="im",cascade= CascadeType.ALL)
    private Set<Store> stores;  

Форма магазина:

<form th:action="@{/addstore}" th:object="${store}" method="post">
    <fieldset>
        <table>

            <tr>
                <td><label>E-mail</label></td>
                <td><input type="text" th:field="*{email}" /></td>

            </tr>
            <tr>
                <td><label>Nombre</label></td>
                <td><input type="text" th:field="*{nombre}" /></td>

            </tr>

           <!--Here I want to add the option to upload the image -->

            <tr>
                <td>
                    <button type="submit">Ok</button>

                </td>
            </tr>
        </table>
</form>

Контроллер:

@PostMapping("/addstore")
    public String saveStore(@ModelAttribute("store") Store store, 
            @ModelAttribute("file") MultipartFile image){

    //I have to upload the image before insert the store.
    //imageService.insertImage(image);

    storeService.insertStore(store);
}

Я могу вставить новый Магазин и могу вставить новое Изображение, но мне нужно вставить их в ЖЕ форму.

Я использую MultipartFile, чтобы добавить изображение в базу данных (это работает), поэтому конфигурация MultipartFile в порядке. Проблема в том, что я не знаю, как получить данные магазина и изображения из одной формы.

Пожалуйста, вы можете мне помочь?

1 Ответ

0 голосов
/ 08 ноября 2018

Ваш код почти верен, вам просто не хватает деталей. Во-первых, вам нужно добавить в форму ввод типа file с атрибутом имени, установленным в file , а также добавить следующий тег в форму enctype="multipart/form-data".

<form th:action="@{/addstore}" th:object="${store}" method="post" enctype="multipart/form-data">
        <table>
            <tr>
                <td><label>E-mail</label></td>
                <td><input type="text" th:field="*{email}" /></td>
            </tr>
            <tr>
                <td><label>Nombre</label></td>
                <td><input type="text" th:field="*{nombre}" /></td>
            </tr>
           <input type="file" name="file" accept="image/x-png,image/jpeg,image/jpg"/>
            <tr>
                <td>
                    <button type="submit">Ok</button>
                </td>
            </tr>
        </table>
</form>

Затем измените контроллер так, чтобы он выглядел как следующая версия.

@RequestMapping(value = "/addstore", method = RequestMethod.POST)
public String saveStore(@ModelAttribute("store") Store store, 
                        @RequestParam(value = "file") MultipartFile image){
    imageService.insertImage(image);
    storeService.insertStore(store);
}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...