Как отправить файл на сервер с помощью multipart / form-date через Swift

Как отправить файл на сервер с помощью языка Swift? Я отправляю файл на сервер, а глобальная переменная $ _FILES (PHP) не видит загруженный файл. В этом случае, если я отправлю запрос из любого другого пакета отправителя (например, ARC). Затем глобальный массив успешно отображает переданный POST методом файла. Что не так с этим?

            // SEND DATA
            let boundary = "--------------------------684819564013531921146535"

            data = AppDelegate.createBody(boundary: boundary,
                                          data: data,
                                          mimeType: "image/png",
                                          filename: "FF4D00-0.8.png")

            let headers = [
                "Content-Type":"multipart/form-data; boundary=\(boundary)",
                "Content-Length":"\(data.count)"
            ]

            HttpURLConnection.request(type: 1, command: "upload/img", headers: headers, body: data, complition: { (error, data) in
                if error == nil && data != nil {                   
                      print(data)                                   
                }                                                    
             })

А вот функция, которая создает тело запроса

// create body for http request
static func createBody(boundary: String,
                data: Data,
                mimeType: String,
                filename: String) -> Data {

    var body = Data()
    body.append("\(boundary)\r\n".data(using: String.Encoding.utf8, allowLossyConversion: true)!)
    body.append("Content-Disposition: form-data; name=\"file\"; filename=\"FF4D00-0.8.png\"\r\n".data(using: String.Encoding.utf8, allowLossyConversion: true)!)
    body.append("Content-Type: \(mimeType)\r\n\r\n".data(using: String.Encoding.utf8, allowLossyConversion: true)!)
    body.append("P".data(using: String.Encoding.utf8, allowLossyConversion: true)!)
    body.append("\r\n".data(using: String.Encoding.utf8, allowLossyConversion: true)!)
    body.append(boundary.appending("--").data(using: String.Encoding.utf8, allowLossyConversion: true)!)

    print("size is \(body.count)")

    return body as Data
}

Вот работа:

example результат отправляется через ARC

0
задан My Name 13 August 2018 в 15:49
поделиться

1 ответ

Я использую библиотеку Alamofire. Хорошо документированы, см., Например:

let imageData = UIImagePNGRepresentation(image)!

Alamofire.upload(imageData, to: "https://httpbin.org/post").responseJSON { response in
    debugPrint(response)
}

0
ответ дан Philippe H. Regenass 15 August 2018 в 16:59
поделиться

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

Похожие вопросы: