我有一个表单,可以将图像上传到我在网站根目录下创建的文件存储文件夹中。我的图像与产品有关。如何从产品视图显示这些图像。 注意:一个产品可以有多个图像。
我的实体层:
@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"); } } }
如何使用百里香叶显示产品实例中的图像
答案 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