Я пытаюсь загрузить файл, используя Alamofire
. Загрузка работает нормально при использовании File ( NSUrl
), однако я не могу понять, как использовать эту NSData
опцию?
Вот что у меня есть в качестве теста:
var url:NSURL = NSURL.URLWithString("http://localhost:8080/bike.jpeg")
var err: NSError?
var imageData :NSData = NSData.dataWithContentsOfURL(url,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)
Alamofire.upload(.POST, "http://localhost:8080/rest/service/upload/test.png", imageData)
.progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in
println(totalBytesWritten)
}
.responseJSON { (request, response, JSON, error) in
println(request)
println(response)
println(JSON)
}
Я получаю код статуса 415?
Кроме того, как я могу отправить дополнительные параметры в загрузке?
Спасибо
РЕДАКТИРОВАТЬ
Я не установил правильный Content-Type:
var manager = Manager.sharedInstance
manager.session.configuration.HTTPAdditionalHeaders = ["Content-Type": "application/octet-stream"]
let imageData: NSMutableData = NSMutableData.dataWithData(UIImageJPEGRepresentation(imageTest.image, 30));
Alamofire.upload(.POST, "http://localhost:8080/rest/service/upload?attachmentName=file.jpg", imageData)
.progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in
println(totalBytesWritten)
}
.responseString { (request, response, JSON, error) in
println(request)
println(response)
println(JSON)
}
Все еще не могу понять, как отправлять дополнительные параметры вместе с загрузкой.
Ответы:
Вот простая функция, которая требует целевой URL-адрес загрузки, параметры и imageData и возвращает URLRequestConvertible и NSData, которые требуются Alamofire.upload для загрузки изображения с параметрами.
Вот пример того, как его использовать (см. СОЗДАНИЕ И ОТПРАВИТЬ ЗАПРОС):
И если вам нужен php файл для целевого URL (с папкой 'uploads' в том же каталоге):
источник
Загрузить фото / файл с параметрами и настраиваемыми заголовками через Swift 3 и 4 и Alamofire 4
через Swift 2 и Alamofire 3
Текущая быстрая версия: https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#uploading-data-to-a-server
источник
parameters
это[String:Any]
потому , чтоvalue.data(using: .utf8))!
не является допустимым дляAny Type
. У вас есть предложения, как это решить?Вот решение, использующее Alamofire 3.0, основанное на ответе против пробелов:
источник
case .Success(let upload, _, _)
upload
не могу найти. Я что-то упускаю?encodingResult
- этоMultipartFormDataEncodingResult
перечисление..Success Case
Имеет следующие параметры: (request: Request, streamingFromDisk: Bool, streamFileURL: NSURL?
) Такupload
есть запрос. Вы добавилиimport Alamofire
?Улучшение ответа EdFunke для Swift 2.2 Alamofire 3.3.1
источник
Многокомпонентная загрузка планируется включить в следующую (1.3.0) версию Alamofire. Тем временем, используя информацию из этой цепочки, я создал класс, который упрощает загрузку файлов и включает дополнительные параметры (обычные «входы») в запрос вместе с одним или несколькими файлами. Без предположения, что файлы относятся к определенному типу или используют маршрутизаторы.
FileUploader.swift:
Это будет использоваться так:
Проверьте это или скачайте по этой ссылке : https://gist.github.com/ncerezo/b1991f8dfac01cb162c0
источник
Код в ответе @ antiblank у меня не работал. Я внес несколько изменений, и теперь он работает:
ИСПОЛЬЗОВАНИЕ:
NetData из https://github.com/nghialv/Net/blob/master/Net/NetData.swift
upload.php Код:
источник
Более короткая версия, основанная на ответах @antiblank и @VincentYan.
Класс
использование
источник
Хотя есть и другие ответы, которые советуют, как вручную создавать составные запросы, вы можете просто придерживаться AFNetworking. Несмотря на то, что он написан на Objective-C, вы все равно можете использовать его в своих проектах Swift (см. Swift и Objective-C в том же проекте ). В любом случае, код Swift для отправки составного запроса с использованием AFNetworking выглядит следующим образом:
Раздражающий Xcode имеет проблемы с распознаванием этого
id<AFMultipartFormData>
параметра,formData
поэтому вам не понравится типичное завершение кода редактораappendPartWithFileData
метода или его параметров, но когда вы его компилируете и запускаете, он работает нормально.источник
Вы получаете 415 из-за того, что в вашем запросе не указан тип содержимого . Ниже приведено общее описание загрузки изображений на Swift 2 и AlamoFire.
источник
Ниже приведены быстрый и PHP-код
Код Swift -> Apple Swift версии 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Цель: x86_64-apple-macosx10.9
Код PHP для получения параметров и файла
Здесь параметры обрабатываются в $ _Request
И файлы обрабатываются в $ _File
Формат в данных $ _File (массив, словарь или строка) будет зависеть от запроса на быстрой стороне, здесь См. Эту строку в коде
на стороне PHP withName: "imgFiles []" дает массив имени, формата, типа
Например
Код PHP
источник
Я взял ответ antiblank и обернул все это в одну функцию с обработчиком завершения. Думал, что это может быть кому-то полезно. Это немного «грубее», чем ответ antiblank, поскольку я просто беру строковый ответ из файла PHP (а не JSON).
Вот как вы это называете:
Вот сама функция:
А вот и php файл.
источник