• 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
402 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ź 461 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 269 wizyt
pytanie zadane 7 października 2020 w C i C++ przez magda_19 Gaduła (3,080 p.)
+1 głos
1 odpowiedź 373 wizyt

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...