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?

0 ответов

Другие вопросы по тегам