Как отправить файл на сервер с помощью языка 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
Я использую библиотеку Alamofire. Хорошо документированы, см., Например:
let imageData = UIImagePNGRepresentation(image)!
Alamofire.upload(imageData, to: "https://httpbin.org/post").responseJSON { response in
debugPrint(response)
}