J'essaie de télécharger un fichier en utilisant Alamofire
. Le téléchargement fonctionne bien lorsque vous utilisez un fichier ( NSUrl
), cependant, je n'arrive pas à comprendre comment utiliser l' NSData
option?
Voici ce que j'ai comme test:
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)
}
Je reçois un code de statut 415?
En outre, comment puis-je envoyer des paramètres supplémentaires lors du téléchargement?
Merci
ÉDITER
Je n'ai pas défini le type de contenu correct:
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)
}
Je ne comprends toujours pas comment envoyer des paramètres supplémentaires avec le téléchargement.
Réponses:
Voici une fonction simple qui nécessite l'URL de téléchargement cible, les paramètres et imageData et renvoie l'URLRequestConvertible et NSData dont Alamofire.upload a besoin pour télécharger une image avec des paramètres.
Voici un exemple de son utilisation (voir CRÉER ET ENVOYER UNE DEMANDE):
Et si vous avez besoin du fichier php pour l'url cible (avec un dossier 'uploads' dans le même répertoire):
la source
Télécharger une photo / un fichier avec des paramètres et des en-têtes personnalisés via Swift 3 & 4 et Alamofire 4
via Swift 2 et Alamofire 3
Version Swift actuelle: https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#uploading-data-to-a-server
la source
parameters
c'est[String:Any]
parce quevalue.data(using: .utf8))!
n'est pas valide pourAny Type
. Avez-vous des suggestions pour résoudre ce problème?Voici une solution utilisant Alamofire 3.0 basée sur la réponse antiblanks:
la source
case .Success(let upload, _, _)
upload
Impossible de trouver. Est-ce que je manque quelque chose?encodingResult
est uneMultipartFormDataEncodingResult
énumération. Le.Success Case
a les paramètres suivants: (request: Request, streamingFromDisk: Bool, streamFileURL: NSURL?
) Il enupload
va de même pour une requête. Avez-vous ajoutéimport Alamofire
?Amélioration de la réponse d' EdFunke pour Swift 2.2 Alamofire 3.3.1
la source
Le téléchargement en plusieurs parties devrait être inclus dans la prochaine version (1.3.0) d'Alamofire. En attendant, en utilisant les informations de ce fil, j'ai créé une classe qui simplifie le téléchargement de fichiers et inclut des paramètres supplémentaires ("entrées" régulières) dans la requête avec un ou plusieurs fichiers. Sans supposer que les fichiers sont d'un type particulier ou l'utilisation de routeurs.
FileUploader.swift:
Il serait utilisé comme ceci:
Découvrez-le ou téléchargez à partir de ce contenu: https://gist.github.com/ncerezo/b1991f8dfac01cb162c0
la source
Le code de la réponse de @ antiblank ne fonctionnait pas pour moi. J'ai fait quelques changements et ça marche maintenant:
UTILISATION:
Les NetData de https://github.com/nghialv/Net/blob/master/Net/NetData.swift
Code upload.php:
la source
Version plus courte basée sur les réponses @antiblank et @VincentYan.
Classe
Usage
la source
Bien qu'il existe d'autres réponses qui indiquent comment construire manuellement des demandes en plusieurs parties, vous pouvez simplement vous en tenir à AFNetworking. Même s'il est écrit en Objective-C, vous pouvez toujours l'utiliser dans vos projets Swift (voir Swift et Objective-C dans le même projet ). Quoi qu'il en soit, le code Swift pour soumettre une requête en plusieurs parties à l'aide d'AFNetworking est le suivant:
Xcode ennuyeux a des problèmes pour reconnaître ce
id<AFMultipartFormData>
paramètre,formData
donc vous n'appréciez pas l'achèvement typique du code de l'éditeur de laappendPartWithFileData
méthode ou de ses paramètres, mais lorsque vous le compilez et l'exécutez, cela fonctionne bien.la source
Vous obtenez 415 en raison du type de contenu manquant dans votre demande. Vous trouverez ci-dessous une solution complète de téléchargement d'images sur Swift 2 et AlamoFire
la source
Ci-dessous sont Swift et Php Code
Code Swift -> Apple Swift version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Cible: x86_64-apple-macosx10.9
Code PHP pour obtenir des paramètres et un fichier
Ici, les paramètres sont traités dans $ _Request
Et les fichiers sont gérés dans $ _File
Le format dans les données $ _File (tableau, dictionnaire ou chaîne) dépendra de la requête du côté swift, ici Voir cette ligne dans le code
côté Php withName: "imgFiles []" donne un tableau de nom, format, type
Par exemple
Code PHP
la source
J'ai pris la réponse d'antiblank et j'ai tout emballé dans une fonction avec le gestionnaire d'achèvement. J'ai pensé que cela pourrait être utile pour quelqu'un. C'est un peu plus `` rugueux '' que la réponse antiblank car je prends simplement une réponse de chaîne du fichier PHP (pas JSON).
Voici comment vous l'appelez:
Voici la fonction elle-même:
Et voici le fichier php.
la source