У меня есть база данных mysql, в которую я хочу загрузить изображение с помощью SpringMVC и Thymeleaf. Я не использую Spring boot.
PhotoController:
@RequestMapping(value = "/form", method = RequestMethod.GET)
public String form() {
return "form";
}
@RequestMapping(value = "/doUp", method = RequestMethod.GET)
public String subirFoto(@RequestParam("file") File file) {
byte[] imageData = new byte[(int) file.length()];
try {
FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.read(imageData);
fileInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
Photo image = new Photo();
image.setNombre("test.jpg");
image.setFoto(imageData);
try {
photoService.insertPhoto(image);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "success";
}
form.html:
<!DOCTYPE html>
<html xmlns:th = "http://www.thymeleaf.org">
<body>
<h1>Spring Boot file upload example</h1>
<form th:action = "@{/doUp}" th:object = "${file}" method = "get"
enctype = "multipart/form-data">
<input type = "file" name = "file" /><br/><br/>
<input type = "submit" value = "Submit" />
</form>
</body>
</html>
Если я изменю метод и попытаюсь загрузить изображение с помощью
File file = new File("/home/Desktop/pokemon.jpg");
работает нормально, но мне нужно загрузить файл по форме.
Получаю следующую ошибку:
java.io.FileNotFoundException: pokemon.jpg (No existe el archivo o el directorio)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at com.myproject.controller.PhotoController.subirFoto(PhotoController.java:90)
Я понимаю, что проблема в пути к изображению, но я не знаю, кто это исправил ...
Я не могу его использовать, потому что не использую пружинный ботинок





Почему бы не использовать Spring Content JPA? Это может предоставить службу хранения и конечные точки REST для управления контентом и, если вы хотите, связать этот контент с объектами JPA.
pom.xml
<!-- Java API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-jpa</artifactId>
<version>0.4.0</version>
</dependency>
<!-- REST API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest</artifactId>
<version>0.4.0</version>
</dependency>
Configuration
@Configuration
@EnableJpaStores
@Import(RestConfiguration.class) // enable Spring Content Rest
public class MysqlConfig {
// Initialize the database schema
//
@Value("/org/springframework/content/jpa/schema-drop-mysql.sql")
private Resource dropReopsitoryTables;
@Value("/org/springframework/content/jpa/schema-mysql.sql")
private Resource dataReopsitorySchema;
@Bean
DataSourceInitializer datasourceInitializer() {
ResourceDatabasePopulator databasePopulator =
new ResourceDatabasePopulator();
databasePopulator.addScript(dropReopsitoryTables);
databasePopulator.addScript(dataReopsitorySchema);
databasePopulator.setIgnoreFailedDrops(true);
DataSourceInitializer initializer = new DataSourceInitializer();
initializer.setDataSource(dataSource());
initializer.setDatabasePopulator(databasePopulator);
return initializer;
}
}
Создайте «магазин»:
ImagesStore.java
@StoreRestResource(path = "images")
public interface ImagesStore extends Store<String> {
}
Это все, что вам нужно для создания конечных точек REST @ /images. Когда ваше приложение запускается, Spring Content будет смотреть на ваши зависимости (видя Spring Content JPA и REST), смотреть на ваш интерфейс ImagesStore и внедрять реализацию этого интерфейса для JPA. Он также внедрит @Controller, который пересылает http-запросы этой реализации. Это избавляет вас от необходимости реализовывать все это самостоятельно, что, я думаю, именно то, что вам нужно.
Так...
curl -X POST /images/pokemon.jpg -F "image=@/home/Desktop/pokemon.jpg"
сохранит изображение в базе данных (как BLOB).
curl /images/pokemon.jpg
получит его снова и так далее ... поддерживает полный CRUD.
Есть пара руководств по началу работы здесь. Справочное руководство - здесь. И есть обучающее видео здесь. Бит кодирования начинается примерно на половине пути.
HTH
Я не использую Spring boot
Без проблем. Я обновил ответ, чтобы использовать стандартное включение Spring.
взгляните на этот spring.io/guides/gs/uploading-files