2016-07-11 21 views
8

私はSwiftとVaporフレームワークを使用してサーバーサイドアプリケーションを記述しようとしています。しかし、私はVaporを使って静的ファイルをどのように扱うかを理解できません。 PublicまたはResourcesディレクトリに移動するだけでは不十分です。Vaporを使用して静的ファイルを提供するにはどうすればよいですか?

どうすればいいですか?

UPD。 私はTanner Nelsonが提案したステップを実行しましたが、まだ動作しません。

  1. vapor buildvapor run(蒸気ツールボックスv0.6.1を使用して):私がこれまで試したどのような

  2. ./build/debug/App(これにはPackage.swiftが含まれています)。

  3. Tanner Nelsonが提案した編集スキームの後にXcode 8 betaで実行します。私はPublicフォルダ内のファイルvapor_logo.pngともPublic/images/フォルダ内に同じファイルを持っているエラー {"error":true,"message":"Page not found"}

    を取得し、このすべてのケースで

。私はそれを要求しようとすると失敗します。私が作ったリクエスト:http://localhost:8080/image/vapor_logo.pnghttp://localhost:8080/vapor_logo.png。しかし、他のルートは正常に動作します。

UPD 2.これはすべて私の間違いでした。まず、vapor_logo.pngと呼ばれるファイルは、実際にはvapor-logo.pngと呼ばれていました。第二に、あなたがリクエストをするときに大文字小文字が問題になる。私はまた、IMG_8235.JPGという名前のファイルを要求しようとしましたが、ファイルの拡張子はjpgと書いています。

私の場合と同じ問題が発生した場合は、Tanner Nelsonの答えに従って、という名前が正確にの名前がディスク上のファイル名と一致することを確認してください。

答えて

13

蒸気Docsからフォルダ構造:

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

何のルートは、ファイル名とその競合を登録されていない場合Publicフォルダ内のすべてのファイルは、デフォルトで提供されます。例えば

、あなたはファイルPublic/foo.pngと、次のmain.swiftファイルがある場合:localhost/welcome

import Vapor 

let drop = Droplet() 

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

drop.serve() 

要求を"Hello, world"を返すとlocalhost/foo.pngへの要求がfoo.pngを返します。

これが正しく動作しない場合、作業ディレクトリが正しく設定されていない可能性があります。これは、プロジェクトをXcodeから実行している場合、またはプロジェクトのルートディレクトリ以外のフォルダからコマンドラインから実行している場合に発生します。

Xcodeを修正するには、Schemes > App > Edit Scheme > Run > Options > Working Directory > [x] Use Custom Working Directoryに移動し、ディレクトリがプロジェクトのルート(Package.swiftが存在する場所)に設定されていることを確認します。

Xcode working directory

コマンドラインから実行するときに修正するには、ルートディレクトリからアプリケーションを実行していることを確認してください。つまり、.buildフォルダがルートディレクトリにあるので、実行コマンドは.build/debug/Appのようになります。

+0

ありがとうございました!しかし、それでも動作しません。元の質問に更新しました。 –

+0

現在動作中です、ありがとうございます –