Как прочитать тело запроса POST с помощью GCDWebServer в Swift

Я пытаюсь использовать GCDWebServer для чтения/записи файла в каталоге документов. Чтение файла кажется довольно простым, и я в значительной степени получил то, что мне нужно.

Я хочу записать в файл с помощью запроса POST. Поэтому я попытался добавить обработчик для метода «POST», но в блоке процесса я вообще не могу прочитать тело запроса.

Если я сделаю что-то вроде:

webServer?.addHandler(forMethod: "POST", path: "/post", request: GCDWebServerDataRequest.self, processBlock: {request in

        dump(request)

        return GCDWebServerDataResponse(html: "An error occurred.")
    })

Это выводит все заголовки на консоль (в NSObject). Но как мне прочитать в теле переменную?

(iOS 10.3, Swift 3, XCode 8.3.2)


person Drew Perry    schedule 15.05.2017    source источник


Ответы (1)


    self.webServer?.addHandler(forMethod: "POST", path: "/uploadfile", request: GCDWebServerMultiPartFormRequest.classForCoder(), processBlock: { (request) -> GCDWebServerResponse? in

        print("ádasdnaskdnaskjd=====<")
        let get = request as! GCDWebServerMultiPartFormRequest

        do {

            if let files = get.files {

               try files.forEach({ (file) in

                    if let multipartFile = file as? GCDWebServerMultiPartFile {

                        let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
                        let urlOfFile = documentsPath.appending("/\(multipartFile.fileName!)");
                        let url = URL(fileURLWithPath: urlOfFile)

                        let fileManager = FileManager.default
                        try fileManager.moveItem(at: URL(fileURLWithPath: multipartFile.temporaryPath), to: url);

                        print("URL of file: \(url)")
                    }

                })

            }

            return GCDWebServerDataResponse.init(html: "")

        } catch {
            print(error.localizedDescription)
        }

        return GCDWebServerDataResponse.init(html: "")

    })

Вы можете использовать почтальона, чтобы проверить его с телом (данные формы)

person Hau Nguyen    schedule 09.06.2017