2016-07-11 27 views
8

Próbuję napisać aplikację po stronie serwera, używając szkieletu Swift i Vapor. Jednak nie mogę wymyślić, jak obsługiwać pliki statyczne za pomocą Vapor. Nie wystarczy po prostu przenieść je do katalogu Public lub.Jak wyświetlać pliki statyczne za pomocą Vapor?

Jak mogę to zrobić?

UPD. Wykonałem kroki, które Tanner Nelson zasugerował, ale nadal nie działa.

Co próbowałem dotąd:

  1. vapor build i vapor run (przy użyciu pary Toolbox v0.6.1).

  2. ./build/debug/App z katalogu głównego (który zawiera Package.swift).

  3. Run w Xcode po 8 beta programu do edycji jak Tanner Nelson sugeruje.

We wszystkich tych przypadkach otrzymuję błąd {"error":true,"message":"Page not found"}

Mam plik vapor_logo.png wewnątrz folderu Public a także ten sam plik wewnątrz Public/images/ folderu. Próbuję o to poprosić, a to się nie udaje. Wnioski, które złożyłem: http://localhost:8080/image/vapor_logo.png i http://localhost:8080/vapor_logo.png. Jednak inne trasy działają dobrze.

UPD 2. Cóż, to były wszystkie moje błędy. Najpierw plik o nazwie vapor_logo.png faktycznie nazywa się vapor-logo.png. Po drugie, sprawa ma znaczenie, gdy złożysz wniosek. Próbowałem również zażądać pliku o nazwie IMG_8235.JPG, ale wypisz rozszerzenie pliku jako jpg, więc dostałem błąd.

Więc po prostu Podsumowując: jeśli wystąpi ten sam problem jak ja, śledzić odpowiedzi garbarza Nelsona i upewnij się, że nazwa żądanego pliku dokładnie mecze Nazwa pliku na dysku.

Odpowiedz

13

Vapor struktura folderów z Docs:

. 
├── App 
│ └── main.swift 
│ └── ... 
├── Public 
├── Resources 
└── Package.swift 

Wszystkie pliki znajdujące się w folderze Public serwowane będą domyślnie jeśli nie ma trasy zostały zarejestrowane że konflikt z nazwą pliku.

Na przykład, jeśli masz plik Public/foo.png i następujący main.swift plik:

import Vapor 

let drop = Droplet() 

drop.get("welcome") { request in 
    return "Hello, world" 
} 

drop.serve() 

Żądanie localhost/welcome wróci "Hello, world" i żądanie localhost/foo.png wróci foo.png.

Jeśli to nie działa poprawnie, prawdopodobnie katalog roboczy nie jest poprawnie skonfigurowany. Może się tak zdarzyć, jeśli uruchamiasz swój projekt z Xcode lub uruchamiasz go z wiersza poleceń z folderu, który nie jest katalogiem głównym projektu.

Aby naprawić Xcode, przejdź do Schemes > App > Edit Scheme > Run > Options > Working Directory > [x] Use Custom Working Directory i upewnij się, że katalog jest ustawiony na katalog główny projektu (gdzie znajduje się Package.swift).

Xcode working directory

Aby ustalić, kiedy uruchomiony z linii poleceń, upewnij się, że używasz aplikacji z katalogu głównego. tj. polecenie run powinno wyglądać jak .build/debug/App, ponieważ folder .build znajduje się w katalogu głównym.

+0

Dziękuję za odpowiedź! Jednak nadal nie działa. Zrobiłem aktualizację oryginalnego pytania. –

+0

Działa teraz, dziękuję –

Powiązane problemy