Загрузить файл с помощью Swift на сервер с Slim (PHP) - PullRequest
0 голосов
/ 05 июня 2019

Когда я загружаю файл на наш сервер с slim (3.x), сервер всегда отвечает «недопустимый запрос», тип содержимого для POST-запросов должен быть x-www-form-urlencoded «хотя он должен быть отправлен с использованием« content-type: multipart / form-data », потому что он содержит файлы.

Я попробовал точно такой же код с фрагментом PHP без slim, который работает абсолютно нормально.На тонком сервере он даже не запускается из-за ошибки.

    { (...)
        request = NSMutableURLRequest(url: url);
        request.httpMethod = "POST";


        let boundary = generateBoundaryString()

        request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")


        request.httpBody = createBodyWithParameters(params, files: files, boundary: boundary) as Data (...)
     (...)
    }
    func createBodyWithParameters(_ parameters: [String: String]?, files: [uploadFile], boundary: String) -> NSData {
        let body = NSMutableData();

        if parameters != nil {
            for (key, value) in parameters! {
                body.appendString("--\(boundary)\r\n")
                body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
                body.appendString("\(value)\r\n")
            }
        }


        for file in files {
            let filename = file.name
            let filePathKey = file.fileKey
            let mimetype = file.mimetype

            let data = file.file
            body.appendString("--\(boundary)\r\n")
            body.appendString("Content-Disposition: form-data; name=\"\(filePathKey)\"; filename=\"\(filename)\"\r\n")
            body.appendString("Content-Type: \(mimetype)\r\n\r\n")
            body.append(data)
            body.appendString("\r\n")


            body.appendString("--\(boundary)--\r\n")
        }
        return body
    }

При запуске Сервер отвечает неверный запрос, тип содержимого для POST-запросов должен быть x-www-form-urlencoded и не выполняет код маршрута.

...