как отобразить импорт изображений в папку в корне моего сайта - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть форма, которая загружает изображения в папку хранилища файлов, которую я создал в корне моего сайта.Мои изображения связаны с продуктами.как отобразить эти изображения из представления продукта.Примечание: продукт может иметь несколько изображений.

слой моих сущностей:

@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 голосов
/ 06 декабря 2018

Вы можете использовать Spring Content , способный связывать контент с объектами данных Spring и предоставлять REST API для управления этим контентом.

Добавьте следующие зависимости в POM (Spring Boot)Также доступны стартеры):

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;
...

} ​​

@ Открытый класс объекта Entity Image {@ContentId private UUID contentId;@ContentLength private Long contentLength;@MimeType private String mimeType;}

Создать хранилище контента (очень похожее на интерфейс репозитория):

ImageStore.java

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

И это все.ImageStore по сути является универсальным Spring ResourceLoader.Зависимость spring-content-fs заставит Spring Content внедрить реализацию на основе файловой системы, поэтому вам не нужно беспокоиться о ее реализации самостоятельно.Более того, зависимость spring-content-rest заставит Spring Content также внедрить реализацию, если @Controller, который перенаправляет HTTP-запросы в метод ImageStore.

Таким образом, теперь у вас будет полностью функциональная (POST, PUT, GET, DELETE) файловая служба на основе REST на /produitImages, которая будет использовать ваш ImageStore для извлечения (и сохранения) файлов в /path/to/your/filesна вашем сервере.

Итак:

POST /produitImages/{produitId}/some/image.jpg -F "image=@/home/user1/Desktop/test1.jpg"

загрузит test1.jpg и добавит его в список produitId1 изображений.

GET /produitImages/{produitId}

вернет список изображений.

GET /produitImages/{produitId}/images/{contentId}

вернет конкретное изображение.

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...