我正在尝试使用Swift和Vapor框架编写服务器端应用程序。但是,我不知道如何使用Vapor提供静态文件。仅仅将它们移动到Public或Resources目录是不够的。
我怎么能这么做?
UPD.我执行了坦纳·纳尔逊建议的步骤,但仍然不起作用。
到目前为止我尝试过的是:
vapor build和vapor run (使用VaporToolboxv0.6.1)。./build/debug/App (其中包含Package.swift)。在所有这些情况下,我得到错误的{"error":true,"message":"Page not found"}
我的文件vapor_logo.png在Public文件夹中,在Public/images/文件夹中也有相同的文件。我试着要求它,但它失败了。我提出的请求:http://localhost:8080/image/vapor_logo.png和http://localhost:8080/vapor_logo.png。然而,其他路线运作良好。
UPD 2.,这都是我的错误。首先,我认为文件名为vapor_logo.png,实际上称为vapor-logo.png。第二,当你提出请求时,案件很重要。我还试图请求名为IMG_8235.JPG的文件,但将文件扩展名写为jpg,因此出现了一个错误。
因此,简单地回顾一下:如果您遇到了与我相同的问题,请按照Tanner的回答,确保所请求文件的名称与磁盘上的文件名完全匹配。
发布于 2016-07-12 14:00:02
文档中的蒸汽夹结构
VaporApp
├── Package.swift
├── Resources
│ ├── Views
│ │ └── hello.leaf
├── Public
│ ├── images (images resources)
│ ├── styles (css resources)
└── Sources
└── ...如果没有注册与文件名冲突的路由,则默认情况下将为Public文件夹中的任何文件提供服务。
例如,如果您有一个文件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驻留的位置)。

若要修复从命令行运行时的问题,请确保从根目录运行应用程序。也就是说,run命令应该类似于.build/debug/App,因为.build文件夹位于根目录中。
发布于 2018-11-24 15:26:41
对我来说,在configure.swift中取消了这一行的注释
middlewares.use(FileMiddleware.self) // Serves files from `Public` directory发布于 2020-06-04 20:38:15
除了FileMiddleware之外,有时还需要提供一个特定的文件,而不是整个Public目录,这是使用request.fileio.streamFile可以提供帮助的地方:
app.get("file") { (request: Request) in
// stream the file
request.eventLoop.makeSucceededFuture(
request.fileio.streamFile(at: "/your/filepath")
)
}https://stackoverflow.com/questions/38313470
复制相似问题