Я работаю над приложением, которое позволяет пользователям загружать файлы. Я хочу, чтобы загруженные файлы были организованы в заранее созданные папки с именем группы, к которой принадлежит пользователь. Кажется, я не могу найти способ сделать путь редактируемым, чтобы я мог передать имя группы в метод в качестве параметра и сохранить файл в этом каталоге.
Вот моя последняя попытка, которая приводит к исключение «Не удалось сохранить файл файла] с root причиной».
@Service
public class StorageServiceImpl implements StorageService {
@Value("${upload.path}")
private Path path;
public void uploadFile(MultipartFile file,String contentName, String groupName){
//make so that files are stored in path/groupname
this.path = Paths.get(this.path.toString() +"/"+groupName +"/");
String filename = contentName+"-"+StringUtils.cleanPath(file.getOriginalFilename());
System.out.println("\n\n\n\n\n"+filename + "\n\n\n");
try {
if (file.isEmpty()) {
throw new StorageException("Failed to store empty file");
}
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()) {
System.out.println("\n\n\n\n\n"+this.path.resolve(filename) + "\n\n\n");
Files.copy(inputStream, this.path.resolve(filename), StandardCopyOption.REPLACE_EXISTING);
}
}catch (IOException e) {
String msg = String.format("Failed to store file %s", file.getName());
throw new StorageException(msg, e);
}
}
}
Примечание: если каталог groupName создается до запуска этого метода (поскольку я намерен создать его при создании группы), тогда метод пытается сохранить файл в другом каталоге группы. то же имя внутри этого каталога, например:
backend / src / main / webapp / WEB-INF / TestGroup / TestGroup / test.jpg
Посмотрите, как TestGroup появляется дважды