Browse Source

удалить все ..

master
esoe 6 months ago
parent
commit
fbd4164e06
  1. 2
      client-service-teachers/src/main/java/ru/molokoin/clientserviceteachers/controllers/EducationEntryController.java
  2. 14
      explorer_rs/pom.xml
  3. 4
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/ExplorerRsApplication.java
  4. 17
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/config/StorageProperties.java
  5. 74
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/FileController.java
  6. 62
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/PackageController.java
  7. 35
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/StorageController.java
  8. 26
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Document.java
  9. 18
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/FileResponse.java
  10. 48
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Package.java
  11. 39
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Record.java
  12. 14
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/DocumentFace.java
  13. 14
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/PackageFace.java
  14. 9
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/RecordFace.java
  15. 66
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/FileSystemStorage.java
  16. 107
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/FileSystemStorageService.java
  17. 4
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/StorageFace.java
  18. 16
      explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/StorageService.java
  19. 5
      explorer_rs/src/main/resources/META-INF/additional-spring-configuration-metadata.json
  20. 4
      explorer_rs/src/main/resources/application.yaml

2
client-service-teachers/src/main/java/ru/molokoin/clientserviceteachers/controllers/EducationEntryController.java

@ -23,8 +23,6 @@ import com.fasterxml.jackson.databind.JsonMappingException; @@ -23,8 +23,6 @@ import com.fasterxml.jackson.databind.JsonMappingException;
import reactor.core.publisher.Mono;
import ru.molokoin.clientserviceteachers.entities.Course;
import ru.molokoin.clientserviceteachers.entities.EducatonEntry;
import ru.molokoin.clientserviceteachers.entities.Program;
import ru.molokoin.clientserviceteachers.entities.ProgramCretarea;
import ru.molokoin.clientserviceteachers.entities.Student;
@Controller

14
explorer_rs/pom.xml

@ -49,7 +49,7 @@ @@ -49,7 +49,7 @@
<build>
<plugins>
<plugin>
<!-- <plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
@ -60,6 +60,18 @@ @@ -60,6 +60,18 @@
</exclude>
</excludes>
</configuration>
</plugin> -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<skipTests>${tests.skip}</skipTests>
</configuration>
</plugin>
</plugins>
</build>

4
explorer_rs/src/main/java/ru/molokoin/explorer_rs/ExplorerRsApplication.java

@ -2,12 +2,8 @@ package ru.molokoin.explorer_rs; @@ -2,12 +2,8 @@ package ru.molokoin.explorer_rs;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import ru.molokoin.explorer_rs.config.StorageProperties;
@SpringBootApplication
@EnableConfigurationProperties(StorageProperties.class)
public class ExplorerRsApplication {
public static void main(String[] args) {

17
explorer_rs/src/main/java/ru/molokoin/explorer_rs/config/StorageProperties.java

@ -1,17 +0,0 @@ @@ -1,17 +0,0 @@
package ru.molokoin.explorer_rs.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "storage")
public class StorageProperties {
private String location;
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}

74
explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/FileController.java

@ -1,74 +0,0 @@ @@ -1,74 +0,0 @@
package ru.molokoin.explorer_rs.controller;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.support.ServletUriComponentsBuilder;
import ru.molokoin.explorer_rs.entity.FileResponse;
import ru.molokoin.explorer_rs.service.StorageService;
@Controller
@RequestMapping(path = "/explorer_rs")
public class FileController {
private StorageService storageService;
public FileController(StorageService storageService) {
this.storageService = storageService;
}
@GetMapping("/list")
public String listAllFiles(Model model) {
model.addAttribute("files", storageService.loadAll().map(
path -> ServletUriComponentsBuilder.fromCurrentContextPath()
.path("/explorer_rs/download/")
.path(path.getFileName().toString())
.toUriString())
.collect(Collectors.toList()));
return "listFiles";
}
@GetMapping("/download/{filename:.+}")
@ResponseBody
public ResponseEntity<Resource> downloadFile(@PathVariable String filename) {
Resource resource = storageService.loadAsResource(filename);
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=\"" + resource.getFilename() + "\"")
.body(resource);
}
@PostMapping("/upload-file")
@ResponseBody
public FileResponse uploadFile(@RequestParam("file") MultipartFile file) {
String name = storageService.store(file);
String uri = ServletUriComponentsBuilder.fromCurrentContextPath()
.path("/download/")
.path(name)
.toUriString();
return new FileResponse(name, uri, file.getContentType(), file.getSize());
}
@PostMapping("/upload-multiple-files")
@ResponseBody
public List<FileResponse> uploadMultipleFiles(@RequestParam("files") MultipartFile[] files) {
return Arrays.stream(files)
.map(file -> uploadFile(file))
.collect(Collectors.toList());
}
}

62
explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/PackageController.java

@ -1,62 +0,0 @@ @@ -1,62 +0,0 @@
package ru.molokoin.explorer_rs.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import ru.molokoin.explorer_rs.repository.PackageFace;
import ru.molokoin.explorer_rs.entity.Package;
@RestController
@RequestMapping(path = "/", consumes = {"*/*"})
public class PackageController {
@Autowired
private PackageFace repo;
@GetMapping("/package/list")
public ResponseEntity<?> getPackages(){
return new ResponseEntity<>(repo.findAll(), HttpStatus.OK);
}
@GetMapping("/package/{id}")
public ResponseEntity<?> getPackageByID(@PathVariable Integer id){
return new ResponseEntity<>(repo.findPackageById(id), HttpStatus.OK);
}
@PostMapping(path = "/package/create",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> savePackage(@RequestBody Package pack) {
repo.save(pack);
return new ResponseEntity<>(pack, HttpStatus.CREATED);
}
@PostMapping(path = "/package/update/{id}",
consumes = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<?> updatePackage(@PathVariable Integer id, @RequestBody Package pack) {
Package p = repo.findPackageById(id);
p.setTitle(pack.getTitle());
p.setOrigin_title(pack.getOrigin_title());
p.setType(pack.getType());
p.setExtension(pack.getExtension());
p.setDate(pack.getDate());
repo.save(p);
return new ResponseEntity<>(repo.findPackageById(id), HttpStatus.CREATED);
}
@DeleteMapping("/package/delete/{id}")
public ResponseEntity<?> deletePackage(@PathVariable Long id){
Package p = repo.findPackageById(id);
repo.delete(p);
return new ResponseEntity<>("Запись id#" + id + " удалена ... ", HttpStatus.OK);
}
}

35
explorer_rs/src/main/java/ru/molokoin/explorer_rs/controller/StorageController.java

@ -1,10 +1,41 @@ @@ -1,10 +1,41 @@
package ru.molokoin.explorer_rs.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import ru.molokoin.explorer_rs.service.StorageFace;
import ru.molokoin.explorer_rs.entity.Document;;
@Controller
@RequestMapping(path = "/stroage")
/**
* Контроллер предоставляющий http-api
* для доступа к файлам хранилища данных
*
*/
@RestController
@RequestMapping(path = "/", consumes = {"*/*"})
public class StorageController {
@Autowired
private StorageFace storage;
// public StorageController(StorageFace storage){
// this.storage = storage;
// }
/**
* Получение перечня документов размещенных в хранилище
* - перечень формируется на основании сканирования файловой системы
* @return
*/
@GetMapping(path = "/storage/list")
public ResponseEntity<List<Document>> listStorage(){
return new ResponseEntity<>(storage.list(), HttpStatus.OK);
}
}

26
explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Document.java

@ -1,39 +1,15 @@ @@ -1,39 +1,15 @@
package ru.molokoin.explorer_rs.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Data
public class Document {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
public class Document extends Object{
private String name;//наименование файла в файловой системе ({id}.{extension})
private String name_origin;//оригинальное название загруженного файл
private String path;//путь в файловой системе (root/{id}.{extension})
private String extension;//расширение файла
private long size;//размер файла
/**
* @param name
* @param name_origin
* @param path
* @param extension
* @param size
*/
public Document(String name, String name_origin, String path, String extension, long size) {
this.name = name;
this.name_origin = name_origin;
this.path = path;
this.extension = extension;
this.size = size;
}
}

18
explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/FileResponse.java

@ -1,18 +0,0 @@ @@ -1,18 +0,0 @@
package ru.molokoin.explorer_rs.entity;
import lombok.Data;
@Data
public class FileResponse {
private String name;
private String uri;
private String type;
private long size;
public FileResponse(String name, String uri, String type, long size) {
this.name = name;
this.uri = uri;
this.type = type;
this.size = size;
}
}

48
explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Package.java

@ -1,48 +0,0 @@ @@ -1,48 +0,0 @@
package ru.molokoin.explorer_rs.entity;
import java.util.Date;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* Обертка для хранения данных о загружаемом пакете
*/
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Data
public class Package {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String title;// Наименование файла в файловой системе
private String origin_title;// Наименование загружаемого файла
private String type;// Наименование загружаемой формы
private String extension;// Расширение файла
private Date date;// Время загрузки пакета на сервер
// Пока не работает блок авторизации, учет автора безсмысленен
// private Person author;// Пользователь, загрузивший файл
/**
* Конструктор без id
* @param title
* @param origin_title
* @param type
* @param extension
* @param date
*/
public Package(String title, String origin_title, String type, String extension, Date date) {
this.title = title;
this.origin_title = origin_title;
this.type = type;
this.extension = extension;
this.date = date;
}
}

39
explorer_rs/src/main/java/ru/molokoin/explorer_rs/entity/Record.java

@ -3,17 +3,10 @@ package ru.molokoin.explorer_rs.entity; @@ -3,17 +3,10 @@ package ru.molokoin.explorer_rs.entity;
import java.util.Date;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;
import jakarta.persistence.CascadeType;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToOne;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -22,36 +15,42 @@ import lombok.NoArgsConstructor; @@ -22,36 +15,42 @@ import lombok.NoArgsConstructor;
@AllArgsConstructor
@Entity
@Data
public class Record {
public class Record extends Document{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String name_origin;//оригинальное название загруженного файл
private String type;//тип загруженного документа (реестр, заявка, протокол ...)
private String author;
private String author;//пользователь, оформивший запись
private Date berth;//дата и время создания записи
private String description;//Пояснения автора записи
/**
* Связь один к одному с таблицей данных файловой системы
*/
@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@OnDelete(action = OnDeleteAction.SET_NULL)
@JoinColumn(name = "document_id", nullable = true)
private Document document;
/**
* Конструктор без id
* @param name
* @param path
* @param extension
* @param size
* @param name_origin
* @param type
* @param author
* @param berth
* @param description
* @param document
*/
public Record(String type, String author, Date berth, String description, Document document) {
public Record(String name, String path, String extension, long size, String name_origin, String type, String author,
Date berth, String description) {
super(name, path, extension, size);
this.name_origin = name_origin;
this.type = type;
this.author = author;
this.berth = berth;
this.description = description;
this.document = document;
}
public Record(Document document){
setName(document.getName());
setPath(document.getPath());
setExtension(document.getExtension());
setSize(document.getSize());
}
}

14
explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/DocumentFace.java

@ -1,14 +0,0 @@ @@ -1,14 +0,0 @@
package ru.molokoin.explorer_rs.repository;
import java.util.List;
import org.springframework.data.repository.ListCrudRepository;
import org.springframework.stereotype.Repository;
import ru.molokoin.explorer_rs.entity.Document;
@Repository
public interface DocumentFace extends ListCrudRepository<Document, Long>{
List<Document> findAll();
Document findDocumentById(long id);
}

14
explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/PackageFace.java

@ -1,14 +0,0 @@ @@ -1,14 +0,0 @@
package ru.molokoin.explorer_rs.repository;
import java.util.List;
import org.springframework.data.repository.ListCrudRepository;
import org.springframework.stereotype.Repository;
import ru.molokoin.explorer_rs.entity.Package;
@Repository
public interface PackageFace extends ListCrudRepository<Package, Long>{
List<Package> findAll();
Package findPackageById(long id);
}

9
explorer_rs/src/main/java/ru/molokoin/explorer_rs/repository/RecordFace.java

@ -1,5 +1,12 @@ @@ -1,5 +1,12 @@
package ru.molokoin.explorer_rs.repository;
public interface RecordFace {
import java.util.List;
import org.springframework.data.repository.ListCrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface RecordFace extends ListCrudRepository<Record, Long>{
List<Record> findAll();
Record findRecordById(long id);
}

66
explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/FileSystemStorage.java

@ -1,17 +1,20 @@ @@ -1,17 +1,20 @@
package ru.molokoin.explorer_rs.service;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;
import jakarta.annotation.PostConstruct;
import ru.molokoin.explorer_rs.config.StorageProperties;
import ru.molokoin.explorer_rs.entity.Document;
import ru.molokoin.explorer_rs.exception.StorageException;
/**
@ -19,17 +22,10 @@ import ru.molokoin.explorer_rs.exception.StorageException; @@ -19,17 +22,10 @@ import ru.molokoin.explorer_rs.exception.StorageException;
*/
@Service
public class FileSystemStorage implements StorageFace{
private final Path root; //путь к корню хранилища данных
/**
* Конструктор, инициирующий путь к корню хранилиа данных,
* установленный файлом настроек приложения
* @param properties
* Перенести в properties
*/
@Autowired
public FileSystemStorage(StorageProperties properties) {
this.root = Paths.get(properties.getLocation());
}
private final Path root = Paths.get("/app/explorer_rs/uploads") ; //путь к корню хранилища данных
/**
* При запуске сервера создаем корневую директорию,
@ -45,10 +41,52 @@ public class FileSystemStorage implements StorageFace{ @@ -45,10 +41,52 @@ public class FileSystemStorage implements StorageFace{
}
}
/**
* Получение перечня документов, размещенных в хранилище
* @throws IOException
*/
@Override
public List<Resource> list() {
// TODO Auto-generated method stub
throw new UnsupportedOperationException("Unimplemented method 'list'");
public List<Document> list() {
List<Document> docs = new ArrayList<>();
/**
* Получаем список файлов в директории root
*/
String[] files = root.toFile().list();
/**
* извлекаем сведения о каждом файле для формирвоания сущности document
*/
for (String file : new ArrayList<>(Arrays.asList(files))) {
Document doc = new Document();
doc.setPath(file);
/**
* Извлекаем имя файла
*/
doc.setName(new File(file).getName());
/**
* Получаем размер файла
*/
long size = 0;
try {
size = Files.size(Paths.get(file));
} catch (IOException e) {
e.printStackTrace();
}
doc.setSize(size);
/**
* Получаем расширение файла
*/
Optional<String> ext = Optional.ofNullable(file)
.filter(f -> f.contains("."))
.map(f -> f.substring(file.lastIndexOf(".") + 1));
doc.setExtension(ext.get());
docs.add(doc);
}
return docs;
}
@Override

107
explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/FileSystemStorageService.java

@ -1,107 +0,0 @@ @@ -1,107 +0,0 @@
package ru.molokoin.explorer_rs.service;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.stream.Stream;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.stereotype.Service;
import org.springframework.util.FileSystemUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import jakarta.annotation.PostConstruct;
import ru.molokoin.explorer_rs.config.StorageProperties;
import ru.molokoin.explorer_rs.exception.StorageException;
import ru.molokoin.explorer_rs.exception.FileNotFoundException;
@Service
public class FileSystemStorageService implements StorageService{
private final Path rootLocation;
@Autowired
public FileSystemStorageService(StorageProperties properties) {
this.rootLocation = Paths.get(properties.getLocation());
}
@Override
@PostConstruct
public void init() {
try {
Files.createDirectories(rootLocation);
} catch (IOException e) {
throw new StorageException("Could not initialize storage location", e);
}
}
@Override
public String store(MultipartFile file) {
String filename = StringUtils.cleanPath(file.getOriginalFilename());
try {
if (file.isEmpty()) {
throw new StorageException("Failed to store empty file " + filename);
}
if (filename.contains("..")) {
// This is a security check
throw new StorageException(
"Cannot store file with relative path outside current directory "
+ filename);
}
try (InputStream inputStream = file.getInputStream()) {
Files.copy(inputStream, this.rootLocation.resolve(filename),
StandardCopyOption.REPLACE_EXISTING);
}
}
catch (IOException e) {
throw new StorageException("Failed to store file " + filename, e);
}
return filename;
}
@Override
public Stream<Path> loadAll() {
try {
return Files.walk(this.rootLocation, 1)
.filter(path -> !path.equals(this.rootLocation))
.map(this.rootLocation::relativize);
}
catch (IOException e) {
throw new StorageException("Failed to read stored files", e);
}
}
@Override
public Path load(String filename) {
return rootLocation.resolve(filename);
}
@Override
public Resource loadAsResource(String filename) {
try {
Path file = load(filename);
Resource resource = new UrlResource(file.toUri());
if (resource.exists() || resource.isReadable()) {
return resource;
}
else {
throw new FileNotFoundException(
"Could not read file: " + filename);
}
}catch (MalformedURLException e) {
throw new FileNotFoundException("Could not read file: " + filename, e);
}
}
@Override
public void deleteAll() {
FileSystemUtils.deleteRecursively(rootLocation.toFile());
}
}

4
explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/StorageFace.java

@ -4,6 +4,8 @@ import java.util.List; @@ -4,6 +4,8 @@ import java.util.List;
import org.springframework.core.io.Resource;
import ru.molokoin.explorer_rs.entity.Document;
/**
* Интерфейс для работы файловым хранилищем
@ -29,7 +31,7 @@ public interface StorageFace { @@ -29,7 +31,7 @@ public interface StorageFace {
* получить список размещенных на хосте и не зарегистрированных в базе файлов
* @return
*/
public List<Resource> list();
public List<Document> list();
/**
* Удаление всех файлов, очистка хранилища

16
explorer_rs/src/main/java/ru/molokoin/explorer_rs/service/StorageService.java

@ -1,16 +0,0 @@ @@ -1,16 +0,0 @@
package ru.molokoin.explorer_rs.service;
import org.springframework.core.io.Resource;
import org.springframework.web.multipart.MultipartFile;
import java.nio.file.Path;
import java.util.stream.Stream;
public interface StorageService {
void init();
String store(MultipartFile file);
Stream<Path> loadAll();
Path load(String filename);
Resource loadAsResource(String filename);
void deleteAll();
}

5
explorer_rs/src/main/resources/META-INF/additional-spring-configuration-metadata.json

@ -1,5 +0,0 @@ @@ -1,5 +0,0 @@
{"properties": [{
"name": "storage.location",
"type": "java.lang.String",
"description": "Path to local storage for uploaded files"
}]}

4
explorer_rs/src/main/resources/application.yaml

@ -15,5 +15,5 @@ spring: @@ -15,5 +15,5 @@ spring:
multipart:
max-file-size: 50MB
max-request-size: 50MB
storage:
location: ./uploads
# storage:
# location: ./uploads
Loading…
Cancel
Save