2016-07-11 25 views
8

Sto provando a scrivere applicazioni lato server usando framework Swift e Vapor. Tuttavia, non riesco a capire, come servire file statici usando Vapor. Non è sufficiente spostarli nella directory Public o Resources.Come servire file statici usando Vapor?

Come posso farlo?

UPD. Ho eseguito dei passaggi suggeriti da Tanner Nelson ma non funziona ancora.

Quello che ho provato finora:

  1. vapor build e vapor run (usando Vapor Toolbox v0.6.1).

  2. ./build/debug/App dalla directory principale (che contiene Package.swift).

  3. Esegui in Xcode 8 beta dopo aver modificato lo schema come suggerito da Tanner Nelson.

In tutti questi casi ottengo l'errore {"error":true,"message":"Page not found"}

devo lima vapor_logo.png all'interno di una cartella Public e anche lo stesso file all'interno della cartella Public/images/. Provo a richiederlo e fallisce. Richieste che ho fatto: http://localhost:8080/image/vapor_logo.png e http://localhost:8080/vapor_logo.png. Tuttavia, altre rotte funzionano bene.

UPD 2. Beh, questo era tutto per i miei errori. Innanzitutto, il file che penso si chiamava vapor_logo.png, in realtà era chiamato vapor-logo.png. Secondo, il caso conta quando fai una richiesta. Ho anche provato a richiedere il file con il nome IMG_8235.JPG ma ho scritto l'estensione del file come jpg, quindi ho ricevuto un errore.

Così, giusto per ricapitolare: se si verifica lo stesso problema come me, seguire la risposta del Tanner Nelson e fare in modo che il nome del file esattamente partite nome del file su disco richiesto.

risposta

13

struttura delle cartelle di vapore da Docs:

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

Tutti i file contenuti nella cartella Public saranno serviti per difetto se non rotte sono state registrate in conflitto con il nome del file.

Ad esempio, se si dispone di un file Public/foo.png e il main.swift seguente file:

import Vapor 

let drop = Droplet() 

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

drop.serve() 

Una richiesta di localhost/welcome sarebbe tornato "Hello, world" e una richiesta di localhost/foo.png sarebbe tornato foo.png.

Se questo non funziona correttamente, è probabile che la directory di lavoro non sia configurata correttamente. Questo può accadere se stai eseguendo il tuo progetto da Xcode o lo stai eseguendo dalla riga di comando da una cartella che non è la directory radice del progetto.

Per correggere Xcode, andare su Schemes > App > Edit Scheme > Run > Options > Working Directory > [x] Use Custom Working Directory e assicurarsi che la directory sia impostata alla radice del progetto (dove risiede Package.swift).

Xcode working directory

Per fissare durante l'esecuzione dalla riga di comando, assicurarsi che si esegue l'applicazione dalla directory principale. Ad esempio, il comando run dovrebbe essere simile a .build/debug/App poiché la cartella .build si trova nella directory principale.

+0

Grazie per la risposta! Tuttavia, non funziona ancora. Ho fatto un aggiornamento alla domanda originale. –

+0

Funziona ora, grazie –