我有一个mysql数据库,我想在其中使用SpringMVC和Thymeleaf上传图像。我没有使用Spring Boot。
PhotoController:
<!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>
form.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)
可以,但是我需要通过表单上传文件。
我遇到下一个错误:
{{1}}
我可以理解问题出在图像的路径上,但是我不知道是谁解决了...
答案 0 :(得分:0)
为什么不使用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
@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> {
}
这就是在/images
上创建REST端点所需的全部。当您的应用程序启动时,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。
有两个入门指南here。参考指南为here。还有一个教程视频here。编码位大约从1/2开始。
HTH