Ich versuche, eine Datei mit hochzuladen Alamofire
. Der Upload funktioniert einwandfrei, wenn eine Datei ( NSUrl
) verwendet wird. Ich kann jedoch nicht herausfinden, wie die NSData
Option verwendet wird.
Das habe ich als 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)
}
Ich erhalte einen Statuscode 415?
Wie kann ich beim Hochladen zusätzliche Parameter senden?
Vielen Dank
BEARBEITEN
Ich habe nicht den richtigen Inhaltstyp eingestellt:
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)
}
Ich kann immer noch nicht herausfinden, wie ich zusätzliche Parameter zusammen mit dem Upload senden soll.
Antworten:
Hier ist eine einfache Funktion, die die Ziel-Upload-URL, Parameter und imageData erfordert und die URLRequestConvertible und NSData zurückgibt, die Alamofire.upload zum Hochladen eines Bildes mit Parametern benötigt.
Hier ist ein Beispiel für die Verwendung (siehe ANFRAGE ERSTELLEN UND SENDEN):
Und wenn Sie die PHP-Datei für die Ziel-URL benötigen (mit einem 'Uploads'-Ordner im selben Verzeichnis):
quelle
Laden Sie Foto / Datei mit Parametern und benutzerdefinierten Headern über Swift 3 & 4 und Alamofire 4 hoch
über Swift 2 und Alamofire 3
Aktuelle schnelle Version: https://github.com/Alamofire/Alamofire/blob/master/Documentation/Usage.md#uploading-data-to-a-server
quelle
parameters
ist ,[String:Any]
weilvalue.data(using: .utf8))!
nicht gültig istAny Type
. Haben Sie Vorschläge, wie Sie dies lösen können?Hier ist eine Lösung mit Alamofire 3.0 basierend auf Antiblanks Antwort:
quelle
case .Success(let upload, _, _)
upload
nicht finden können. Vermisse ich etwasencodingResult
ist eineMultipartFormDataEncodingResult
Aufzählung. Das.Success Case
hat die folgenden Parameter: (request: Request, streamingFromDisk: Bool, streamFileURL: NSURL?
) Soupload
ist eine Anfrage. Hast du hinzugefügtimport Alamofire
?Verbesserung der Antwort von EdFunke für Swift 2.2 Alamofire 3.3.1
quelle
Der mehrteilige Upload soll in der nächsten Version (1.3.0) von Alamofire enthalten sein. In der Zwischenzeit habe ich anhand der Informationen in diesem Thread eine Klasse erstellt, die das Hochladen von Dateien vereinfacht und zusätzliche Parameter (reguläre "Eingaben") zusammen mit einer oder mehreren Dateien in die Anforderung einbezieht. Ohne davon auszugehen, dass Dateien von einem bestimmten Typ sind oder Router verwenden.
FileUploader.swift:
Es würde so verwendet werden:
Probieren Sie es aus oder laden Sie es von dieser Liste herunter: https://gist.github.com/ncerezo/b1991f8dfac01cb162c0
quelle
Der Code in der Antwort von @ antiblank funktionierte bei mir nicht. Ich habe ein paar Änderungen vorgenommen und es funktioniert jetzt:
VERWENDEN:
Die NetData von https://github.com/nghialv/Net/blob/master/Net/NetData.swift
upload.php Code:
quelle
Kürzere Version basierend auf den Antworten von @antiblank und @VincentYan.
Klasse
Verwendung
quelle
Während es andere Antworten gibt, die empfehlen, wie man mehrteilige Anforderungen manuell erstellt, möchten Sie vielleicht nur bei AFNetworking bleiben. Obwohl es in Objective-C geschrieben ist, können Sie es dennoch in Ihren Swift-Projekten verwenden (siehe Swift und Objective-C im selben Projekt ). Der Swift-Code zum Senden einer mehrteiligen Anforderung mithilfe von AFNetworking lautet wie folgt:
Xcode ärgerlich hat Probleme, diesen
id<AFMultipartFormData>
Parameter zu erkennen,formData
so dass Sie nicht die typische Vervollständigung des Editor-Codes derappendPartWithFileData
Methode oder ihrer Parameter genießen , aber wenn Sie sie kompilieren und ausführen, funktioniert sie einwandfrei.quelle
Sie erhalten 415, weil der Inhaltstyp in Ihrer Anfrage fehlt . Unten finden Sie eine vollständige Übersicht zum Hochladen von Bildern auf Swift 2 und AlamoFire
quelle
Unten sind schnelle und PHP-Code
Swift-Code -> Apple Swift Version 3.0.1 (swiftlang-800.0.58.6 clang-800.0.42.1) Ziel: x86_64-apple-macosx10.9
PHP-Code zum Abrufen von Parametern und Dateien
Hier werden Parameter in $ _Request behandelt
Und Dateien werden in $ _File behandelt
Das Format in $ _Dateidaten (Array, Wörterbuch oder Zeichenfolge) hängt von der Anforderung auf der schnellen Seite ab. Hier Siehe diese Zeile im Code
auf der PHP-Seite withName: "imgFiles []" gibt ein Array mit Namen, Format und Typ an
Z.B
PHP-Code
quelle
Ich nahm die Antwort von antiblank und packte dies alles in eine Funktion mit Completion Handler. Ich dachte, es könnte für jemanden nützlich sein. Es ist etwas "rauer" als die Antwort von Antiblank, da ich einfach eine String-Antwort aus der PHP-Datei (nicht JSON) nehme.
So nennt man es:
Hier ist die Funktion selbst:
Und hier ist die PHP-Datei.
quelle