Estoy intentando cargar un archivo usando Alamofire
. La carga funciona bien cuando se usa un archivo ( NSUrl
), sin embargo, parece que no puedo entender cómo usar la NSData
opción.
Esto es lo que tengo como prueba:
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)
}
¿Recibo un código de estado 415?
Además, ¿cómo puedo enviar parámetros adicionales en la carga?
Gracias
EDITAR
No estaba configurando el tipo de contenido correcto:
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)
}
Todavía no puedo averiguar cómo enviar parámetros adicionales junto con la carga.
Respuestas:
Aquí hay una función simple que requiere la URL de carga de destino, los parámetros y los datos de imagen y devuelve URLRequestConvertible y NSData que Alamofire.upload requiere para cargar una imagen con parámetros.
A continuación, se muestra un ejemplo de cómo utilizarlo (consulte CREAR Y ENVIAR UNA SOLICITUD):
Y si necesita el archivo php para la URL de destino (con una carpeta de 'cargas' en el mismo directorio):
fuente
Cargue fotos / archivos con parámetros y encabezados personalizados a través de Swift 3 y 4 y Alamofire 4
vía Swift 2 y Alamofire 3
Versión rápida actual: https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#uploading-data-to-a-server
fuente
parameters
es[String:Any]
porquevalue.data(using: .utf8))!
no es válido paraAny Type
. ¿Tiene alguna sugerencia de cómo resolver esto?Aquí hay una solución que usa Alamofire 3.0 basada en la respuesta de antiblanks:
fuente
case .Success(let upload, _, _)
upload
no puede encontrar. ¿Me estoy perdiendo de algo?encodingResult
es unaMultipartFormDataEncodingResult
enumeración. El.Success Case
tiene los siguientes parámetros: (request: Request, streamingFromDisk: Bool, streamFileURL: NSURL?
) Así queupload
es una Solicitud. ¿Agregasteimport Alamofire
?Mejorando la respuesta de EdFunke para Swift 2.2 Alamofire 3.3.1
fuente
La carga de varias partes está programada para incluirse con la próxima versión (1.3.0) de Alamofire. Mientras tanto, utilizando la información de este hilo, he creado una clase que simplifica la carga de archivos e incluye parámetros adicionales ("entradas" regulares) en la solicitud junto con uno o más archivos. Sin asumir que los archivos son de un tipo particular o el uso de Routers.
FileUploader.swift:
Se usaría así:
Compruébalo o descárgalo de esta esencia: https://gist.github.com/ncerezo/b1991f8dfac01cb162c0
fuente
El código en la respuesta de @ antiblank no me funcionaba. Hice algunos cambios y ahora está funcionando:
UTILIZAR:
El NetData de https://github.com/nghialv/Net/blob/master/Net/NetData.swift
upload.php Código:
fuente
Versión más corta basada en las respuestas de @antiblank y @VincentYan.
Clase
Uso
fuente
Si bien hay otras respuestas que aconsejan cómo construir manualmente solicitudes de varias partes, es posible que desee seguir con AFNetworking. Aunque está escrito en Objective-C, aún puede usarlo en sus proyectos Swift (consulte Swift y Objective-C en el mismo proyecto ). De todos modos, el código Swift para enviar una solicitud de varias partes usando AFNetworking es el siguiente:
Xcode molesto tiene problemas para reconocer este
id<AFMultipartFormData>
parámetro,formData
por lo que no disfruta de la típica finalización del código del editor delappendPartWithFileData
método o sus parámetros, pero cuando lo compila y lo ejecuta, funciona bien.fuente
Obtienes 415 porque falta el tipo de contenido en tu solicitud. A continuación se muestra una solución total para cargar imágenes en Swift 2 y AlamoFire
fuente
A continuación se muestran los códigos Swift y Php
Código Swift -> Apple Swift versión 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Destino: x86_64-apple-macosx10.9
Código PHP para obtener parámetros y archivos
Aquí los parámetros se manejan en $ _Request
Y los archivos se manejan en $ _File
El formato en $ _Datos de archivo (matriz, diccionario o cadena) dependerá de la solicitud en el lado rápido, aquí vea esta línea en el código
en el lado de Php withName: "imgFiles []" da una matriz de nombre, formato, tipo
P.ej
Código PHP
fuente
Tomé la respuesta de antiblank y envolví todo esto en 1 función con controlador de finalización. Pensé que podría ser útil para alguien. Es un poco más 'tosca' que la respuesta de antiblank, ya que simplemente estoy tomando una respuesta de cadena del archivo PHP (no JSON).
Así es como lo llamas:
Aquí está la función en sí:
Y aquí está el archivo php.
fuente