将文件上传到数据库

时间:2018-10-29 18:46:33

标签: hibernate spring-mvc thymeleaf image-uploading

我有一个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}}

我可以理解问题出在图像的路径上,但是我不知道是谁解决了...

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