Ich versuche, eine SQLite-Datei von einem OS X-Projekt, das in Swift geschrieben wurde, auf Quickblox-Server hochzuladen. Ich habe dies bereits heraus auf iOS mit dem Quickblox iOS SDK:Hochladen von Datei zu Quickblox ohne SDK, idealerweise mit Alamofire
let file = QBCOFile()
file.name = "ThisFileName"
file.contentType = "sqlite"
let theData = NSData(contentsOfFile: originalPath)
file.data = theData
QBRequest.uploadFile(file, className: "MyClassName", objectID: cusObjID, fileFieldName: "FieldName", successBlock: {(response:QBResponse,fileUploadInfo:QBCOFileUploadInfo?) in
}, statusBlock: nil, errorBlock: {(response:QBResponse) in
showError()
})
Mit OS X, ich habe mit Alamofire worden und haben andere Anfragen bekommen zu arbeiten, aber nicht diese. Die Beschreibung der Anfrage auf ihrer API-Seite (https://quickblox.com/developers/Custom_Objects#Upload.2FUpdate_file) ist dies:
curl -X POST -H "QB-Token: e7cde5f7f5b93f3fa5ac72a281777cbf0f908374" -F "field_name=avatar" -F '[email protected]"ava.jpg"' https://api.quickblox.com/data/<Class_name>/<record_id>/file.json
Ein Hauptunterschied zwischen dieser Beschreibung und anderen die „-F“ s, die ich bin nicht sicher, was mit zu tun. Hier ist eine Variation des Code, den ich habe versucht, so weit:
Alamofire.upload(Method.POST, "https://api.quickblox.com/data/MyClassName/\(cusObjID)/file.json",
headers: ["QB-Token":realToken],
multipartFormData: { multipartFormData in
if let valData = "FieldName".dataUsingEncoding(NSUTF8StringEncoding) {
multipartFormData.appendBodyPart(data: valData, name: "field_name")
}
multipartFormData.appendBodyPart(data: theData, name: "ThisFileName", fileName: "ThisFileName.sqlite", mimeType: "multipart/form-data")
},
encodingCompletion: { encodingResult in
switch encodingResult {
case .Success(let upload, _, _):
upload.responseJSON { response in
debugPrint(response)
}
case .Failure(let encodingError):
print(encodingError)
}
}
weiß, dass ich das Token und die benutzerdefinierten Objekt-ID (cusObjID) arbeitet, weil ich sie in anderen Anfragen verwendet habe. Ich habe jede Menge Variationen versucht, auf den „appendBodyPart“ Teile, und sie haben alle mir dieses Ergebnis gegeben:
[Result]: SUCCESS: {
errors = (
"Wrong arguments"
);
}
und die Antwort hat
enthaltenStatus = "404 Not Found";
Ich habe einige Antworten gesehen hier auf StackOverflow, das darauf hindeutet, dass Alamofire für diese Art des Uploads möglicherweise nicht funktioniert, wäre also auch eine gute Möglichkeit, dies zu erreichen. Wirklich, jede Möglichkeit, zu erreichen, was ich mit dem iOS Quickblox SDK auf iOS gemacht habe, ist, was ich suche.
UPDATE
bearbeitet der letzten Antwort auf diese Frage verwenden (Uploading file with parameters using Alamofire), ich habe in der Lage, den Fortschritt zu erhalten, wie die Datei-Uploads ich
.progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in
Swift.print("\(totalBytesWritten)/\(totalBytesExpectedToWrite)")
}
aber dennoch aktualisieren bekomme immer noch die gleichen Fehler. By the way, ist das, was meine Request-Header wie aus der erfolgreichen iOS-Version aussieht:
Request headers: {
"Accept-Language" = "en-US;q=1";
"Content-Length" = 6488309;
"Content-Type" = "multipart/form-data; boundary=Boundary+88AB02F344BB7C4E";
"QB-Token" = b6f06b9e6e45c839aecc89019add6bd1;
"User-Agent" = "App Name/2.1 (iPhone; iOS 9.3; Scale/2.00)";
}