如何使用Vapor 3处理多部分请求

时间:2018-03-26 10:18:04

标签: swift 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=...}

通过调查源代码和limited documentation,似乎我应该声明一个解码器来支持多部分传入请求。

所以我做了:

var contentConfig = ContentConfig.default()
let decoder = FormURLDecoder()
contentConfig.use(decoder: decoder, for: .multipart)
services.register(contentConfig)

我使用FormURLDecoder,因为它似乎是我最需要的类IMO,实施BodyDecoder

现在它在func decode<T>(_ type: T.Type) throws -> T where T: Decodable的{​​{1}}中进行了infite-loops,而且我很少有网络资源。

1 个答案:

答案 0 :(得分:3)

我结束了Vapor的松弛,这是一个找到一些信息的好地方。一点帮助。

解决方案非常简单。不要使用XXXXXXXXXXXXXXXXXXXX IXXXXXXXXXXXXXXXXXXX! I XXXXXXXXXXXXXXXXXg! I lXXXXXXXXXXXXXXXng! I loXXXXXXXXXXXXXing! I lovXXXXXXXXXXXming! I loveXXXXXXXXXmming! I love XXXXXXXamming! I love CXXXXXramming! I love C-XXXgramming! I love C-PXogramming! I love C-Programming! Final String = I love C-Programming! ,而是使用req.content.decode(MultipartForm.self)

MultipartForm.decode(from: req)

忘记服务注册我问题的一部分。