Vapor: как не получить конкретную загрузку?
В Vapor как настроить и проверить запрос на загрузку до того, как какая-либо часть такого файла будет загружена на сервер?
Моя текущая попытка в Vapor 3 с обработчиком маршрута, структурированным как:
func imagesUploadOneHandler(_ request: Request) throws -> EventLoopFuture<HTTPResponseStatus> {
let headers = request.http.headers
let headersUploadToken: [String] = headers["Upload-Token"]
if headersUploadToken.count != 1 || headersUploadToken[0] != aValidToken {
return HTTPResponseStatus.notAcceptable
}
// http body content type: 'application/octet-stream'
let dataFuture: EventLoopFuture<Data> = request.http.body.consumeData(max: 50_000_000, on: request)
let futureHTTPResponseStatus = dataFuture.map(to: HTTPResponseStatus.self, {
(data: Data) -> HTTPResponseStatus in
// ... other code
return HTTPResponseStatus.ok
})
return futureHTTPResponseStatus
}
Во-первых, вышесказанное не будет компилироваться. Линия return HTTPResponseStatus.notAcceptable
имеет ошибку времени компиляции "return HTTPResponseStatus.notAcceptable". Как конвертировать HTTPResponseStatus
в EventLoopFuture<HTTPResponseStatus>
был неуловимым.
Во-вторых, может какой-то код до request.http.body.consumeData(...)
в обработчике маршрута предотвратить загрузку содержимого файла? Или же требуется какое-то промежуточное программное обеспечение, чтобы избежать загрузки содержимого данных (например, большого файла) из http.body
?