vapor 文件上传并保存到数据库
时间: 2023-10-03 12:05:58 浏览: 41
在 Vapor 中,可以使用 `File` 类型来处理文件上传。首先,需要在路由中添加一个处理文件上传的路由:
```swift
router.post("upload") { req -> Future<String> in
let directory = DirectoryConfig.detect().workDir + "uploads/"
let file = try req.content.file(at: "file")
let filename = file.filename
let path = directory + filename
let data = Data(bytes: file.data)
try data.write(to: URL(fileURLWithPath: path))
// 保存到数据库
let fileData = FileData(name: filename, path: path)
return fileData.save(on: req).map { _ in
return "File uploaded successfully"
}
}
```
在上面的示例中,我们将上传的文件保存到了指定的目录中,并且创建了一个 `FileData` 模型来保存文件的信息。`FileData` 模型可以定义如下:
```swift
import Vapor
import FluentSQLite
final class FileData: SQLiteModel {
var id: Int?
var name: String
var path: String
init(id: Int? = nil, name: String, path: String) {
self.id = id
self.name = name
self.path = path
}
}
extension FileData: Content {}
extension FileData: Migration {}
```
使用 SQLite 数据库来保存文件信息,需要在 `configure.swift` 文件中添加以下代码:
```swift
try services.register(FluentSQLiteProvider())
let sqlite = try SQLiteDatabase(storage: .file(path: "db.sqlite"))
var databases = DatabasesConfig()
databases.add(database: sqlite, as: .sqlite)
services.register(databases)
```
这样就可以将上传的文件保存到指定的目录并保存信息到数据库中了。