我是一名 Vapor 初学者,我选择从 Vapor 3-rc 开始,因为它似乎破坏了 Vaport 2 的更改。不幸的是,目前还没有完整的文档。
我目前正在尝试将一个简单的 txt 文件从 Postman 上传到我的 Vapor 3 本地服务器。
这是我的路线
let uploadController = FileUploadController()
router.post("uploadtxt", use: uploadController.uploadTXT)
和我的控制器
final class FileUploadController {
func uploadTXT(_ req: Request) throws -> Future<String> {
return try req.content.decode(MultipartForm.self).map(to: String.self, { form in
let file = try form.getFile(named: "txtfile")
return file.filename ?? "no-file"
})
}
}
首先,通过执行Postman请求,服务器返回:
{"error":true,"reason":"There is no configured decoder for multipart\/form-data; boundary=...}
通过研究源代码和有限的文档 https://docs.vapor.codes/3.0/getting-started/content/#configuring-content关于这一点,似乎我应该声明一个解码器来支持多部分传入请求。
所以我做了:
var contentConfig = ContentConfig.default()
let decoder = FormURLDecoder()
contentConfig.use(decoder: decoder, for: .multipart)
services.register(contentConfig)
I used FormURLDecoder
因为在我看来,它似乎是最适合我的需求的课程,实施BodyDecoder
现在它无限循环进入func decode<T>(_ type: T.Type) throws -> T where T: Decodable
of FormURLSingleValueDecoder
,我被困在这里,网络资源很少。