如何显示图像导入到我网站根目录中的文件夹

时间:2018-11-29 15:02:14

标签: java maven spring-boot spring-data-jpa thymeleaf

我有一个表单,可以将图像上传到我在网站根目录下创建的文件存储文件夹中。我的图像与产品有关。如何从产品视图显示这些图像。 注意:一个产品可以有多个图像。

我的实体层:

@Entity

public class Image implements Serializable{

@Id @GeneratedValue
private Long id;
private String filename;    
@ManyToOne()
@JoinColumn(name = "produit_id", nullable = false)
private Produit produit;

   //getters and setters
}

@Entity
public class Produit implements Serializable{
@Id @GeneratedValue
private Long id;
private String designation;
@OneToMany(mappedBy = "produit", cascade = CascadeType.REMOVE)
private Set<Image> images;
   getters and setters

}

我的服务层

@Service @Transactional public class ImageServiceImpl implements
IImageService{  
@Autowired
private ImageRepository imageRepository;
Logger log = LoggerFactory.getLogger(this.getClass().getName());
private final Path rootLocation = Paths.get("filestorage");
@Override
/* code */ 
}

@Override
public Stream<Path> loadFiles() {
    try {
        return Files.walk(this.rootLocation, 1)
                .filter(path -> !path.equals(this.rootLocation))
                .map(this.rootLocation::relativize);
    }
    catch (IOException e) {
        throw new RuntimeException("\"Failed to read stored file");
    }
} }

如何使用百里香叶显示产品实例中的图像

1 个答案:

答案 0 :(得分:0)

您可以使用Spring Content来将内容与Spring数据实体相关联,并提供用于管理该内容的REST API。

在您的POM中添加以下依赖项(也可以使用Spring Boot Starters):

  

pom.xml

    <!-- Java API --> 
    <dependency>
        <groupId>com.github.paulcwarren</groupId>
        <artifactId>spring-content-fs</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>

配置文件存储:

  

StoreConfig.java

@Configuration
@EnableFilesystemStores
@Import(RestConfiguration.class)
public class EnableFilesystemStoresConfig {

    @Bean
    File filesystemRoot() {
        try {
            return new File("/path/to/your/files");
        } catch (IOException ioe) {}
        return null;
    }

    @Bean
    FileSystemResourceLoader fileSystemResourceLoader() {
        return new FileSystemResourceLoader(filesystemRoot().getAbsolutePath());
    }

}

将内容与您的Produit实体相关联:

@Entity
public class Produit implements Serializable{
@Id @GeneratedValue
private Long id;
private String designation;
@OneToMany(mappedBy = "produit", cascade = CascadeType.REMOVE)
private List<Image> images;
...

}

@实体    公共课程图片{       @ContentId私有UUID contentId;       @ContentLength私有Long contentLength;       @MimeType private String mimeType;    }

创建内容存储库(非常类似于Repository接口):

  

ImageStore.java

  @StoreRestResource(path="produitImages")
  public interface ImageStore extends ContentStore<Image,UUID> {
  }

就是这样。 ImageStore本质上是一个通用的Spring ResourceLoader。 spring-content-fs依赖性将导致Spring Content注入基于文件系统的实现,因此您不必担心自己实现它。此外,如果spring-content-rest将HTTP请求转发到@Controller的方法上,则ImageStore的依赖性将导致Spring Content也注入一个实现。

因此,您现在在/produitImages处可以使用基于REST的全功能(POST,PUT,GET,DELETE)文件服务,该服务将使用您的ImageStore来检索(和存储){{ 1}}在您的服务器上。

所以:

/path/to/your/files

将上传POST /produitImages/{produitId}/some/image.jpg -F "image=@/home/user1/Desktop/test1.jpg"并将其添加到test1.jpg的图像列表中。

produitId1

将返回图像列表。

GET /produitImages/{produitId}

将返回特定图像。

HTH