2016-07-11 2 views
8

저는 Swift and Vapor 프레임 워크를 사용하여 서버 측 응용 프로그램을 작성하려고합니다. 그러나 Vapor를 사용하여 정적 파일을 제공하는 방법을 알아낼 수 없습니다. Public 또는 Resources 디렉토리로 이동하는 것만으로는 충분하지 않습니다.증기를 사용하여 정적 파일을 제공하는 방법은 무엇입니까?

내가 어떻게 할 수 있습니까?

UPD. 나는 태너 넬슨 제안의 단계를 수행하지만 여전히 작동하지 않습니다. 지금까지 시도 무엇

:

(증기 도구 상자 v0.6.1를 사용하여)
  1. vapor buildvapor run. (Package.swift를 포함) 루트 디렉토리에서

  2. ./build/debug/App. 태너 넬슨과 같은 편집 방식 후 엑스 코드 8 베타

  3. 실행을 제안했다. 이 모든 경우에

나는 {"error":true,"message":"Page not found"}

가 나는 Public 폴더 내의 파일 vapor_logo.pngPublic/images/ 폴더 안에 같은 파일이 오류 얻을. 나는 그것을 요구하려고 노력하고 실패한다. 내가 작성한 요청 : http://localhost:8080/image/vapor_logo.pnghttp://localhost:8080/vapor_logo.png. 그러나 다른 경로는 정상적으로 작동합니다.

UPD 2. 글쎄, 그건 내 실수였다. 먼저 vapor_logo.png이라고 불리는 파일을 실제로는 vapor-logo.png이라고합니다. 둘째로, 요청할 때 대소 문자가 중요합니다. 또한 이름 IMG_8235.JPG으로 파일을 요청하지만, jpg로 파일 확장자를 작성하려고, 그래서 오류가 발생했습니다.

그래서, 그냥 요약하자면 : 당신이 나와 같은 문제가 발생하는 경우 태너 넬슨의 답변을 따라 이름의 파일 디스크에있는 파일의 정확히 일치하는 이름을 요청 있는지 확인하십시오. Docs에서

답변

13

증기 폴더 구조 : 어떤 경로가 등록되지 않은 경우 Public 폴더에

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

모든 파일이 기본적으로 제공됩니다 파일 이름과 충돌. 예를 들어

, 당신이 파일 Public/foo.png 다음과 같은 main.swift 파일이있는 경우 :

import Vapor 

let drop = Droplet() 

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

drop.serve() 

localhost/welcome에 대한 요청이 "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

작동, 고맙습니다. –

관련 문제