• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Java, Spring - usuwanie pliku po wcześniejszym jego dodaniu

Object Storage Arubacloud
0 głosów
428 wizyt
pytanie zadane 27 lutego 2018 w Java przez niezalogowany

Hej. Dodałem możliwość umieszczania zdjęć na stronie. Zdjęcia dodawane są w formularzu razem z innymi informacjami i dane te są przypisane do pewnego obiektu domenowego. Zaimplementowałem usuwanie obiektu z bazy, ale nie wiem, jak usunąć zdjęcia razem z obiektem. Spójrzcie:

 

@RequestMapping(value="/deleteDog/{id}", method = RequestMethod.GET)
    public String deleteDog(Model model, @PathVariable("id") Long id) {

        dogService.deleteDog(id);
        storageService.delete(id);
        model.addAttribute("dogDeleted", "Pies został usunięty z bazy!");
        return "home";
    }

To jest kontroler, który usuwa obiekt na podstawie dostarczonego id obiektu, a następnie obiekt storageService powinien usunąć zdjęcie na podstawie id. Tak wygląda metoda usuwająca zdjęcie:

 

public void delete(Long id) {
        List<Dog> allDogs = dogService.allDogs();
        for (Dog dog : allDogs) {
            if (dog.getId().equals(id)) {
                Path rooLocation2 = Paths.get(rootLocation + dog.getName() + dog.getOwnersName() + ".jpg");
                try {
                    Files.delete(rooLocation2);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
    }

Niestety nie działa i zdjęcie istnieje nadal. Pod rootLocation mam zapisaną ścieżkę komputera, gdzie zapisywane są zdjęcia. Przy zapisywaniu zdjęć, w ten sposób ustalam ich nazwę:

String filename = dog.getName() + dog.getOwnersName() + ".jpg";

A tak wygląda ścieżka zapisu zdjęć:

private String location = "C:/Users/Tomek/IdeaProjects/dog-calendar-spring/src/main/resources/static/";

Proszę o sugestie, z jakiej biblioteki skorzystać, żeby usunąć plik z komputera.

Moje podejrzenia wyglądają tak:

public static void delete(Path path)
                   throws IOException

usuwa wszystko, co jest pod daną ścieżką. Jednak ja podałem ścieżkę na wzór: C:/Users/Tomek/IdeaProjects/dog-calendar-spring/src/main/resources/static/*zmienna*.jpg
a docelowo powinien być folder, a nie plik jpg. Mam rację? :P

komentarz 27 lutego 2018 przez Mateusz51 Nałogowiec (28,180 p.)
Możesz pokazać jak wygląda u Ciebie folder z zapisanymi zdjęciami?
komentarz 27 lutego 2018 przez niezalogowany
To znaczy? Co mam pokazać? W Intelliij folder znajduje się w src/main/resources/static/
komentarz 27 lutego 2018 przez Mateusz51 Nałogowiec (28,180 p.)
Chodzi mi o to w jaki sposób nadawane są nazwy. I jak to się zapisuje
komentarz 27 lutego 2018 przez niezalogowany
@Override
    public void store(MultipartFile image, Dog dog) {
        String filename = dog.getName() + dog.getOwnersName() + ".jpg";
        try {
            if (image.isEmpty()) {
                throw new StorageException("Błąd podczas próby dodania zdjęcia" + filename);
            }
            if (filename.contains("..")) {
                throw new StorageException(
                        "Nie można zapisać zdjęcia w tej ścieżce "
                                + filename);
            }
            Files.copy(image.getInputStream(), this.rootLocation.resolve(filename),
                    StandardCopyOption.REPLACE_EXISTING);
        } catch (IOException e) {
            throw new StorageException("Nie udało się zapisać zdjęcia " + filename, e);
        }
    }

 

komentarz 27 lutego 2018 przez Mateusz51 Nałogowiec (28,180 p.)
A udało Ci się coś zapisać?
komentarz 27 lutego 2018 przez niezalogowany
Zapisują się i wyświetlają na stronie bezbłędnie.
komentarz 27 lutego 2018 przez Mateusz51 Nałogowiec (28,180 p.)
Gdybym miał zakładać w czym leży problem to w tym że podajesz ścieżkę absolutną do folderu static. Folder ten domyślnie jest pakowany do jara i w rzeczywistej aplikacji podejście takie nie zadziała. (Jar jest read-only). Aby zrobić to poprawnie powinieneś wydzielić oddzielny folder który nie jest pakowany do Jara (, np jakiś folder obok folderu src) i podać do niego ścieżke relatywną od roota projeku czyli taką która zaczyna się /folder/ a nie C:/ścieżka/do/InteliJ/Projekt/src/i/tak/dalej/static/

Jak byś potrzebował konkretnej pomocy to możesz pisać na PW

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 503 wizyt
pytanie zadane 11 października 2020 w C i C++ przez magda_19 Gaduła (3,080 p.)
0 głosów
0 odpowiedzi 273 wizyt
pytanie zadane 7 października 2020 w C i C++ przez magda_19 Gaduła (3,080 p.)
+1 głos
1 odpowiedź 395 wizyt

92,755 zapytań

141,676 odpowiedzi

320,412 komentarzy

62,100 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...