我想從Swift中編寫的OS X項目上傳一個sqlite文件到Quickblox服務器。我已經與Quickblox的iOS SDK想通了這一點在iOS上:將文件上傳到沒有SDK的Quickblox,理想情況下與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()
})
隨着OS X,我一直在使用Alamofire並已經得到了其他請求工作,但沒有這一項。他們的API頁面(https://quickblox.com/developers/Custom_Objects#Upload.2FUpdate_file)的請求的描述是這樣的:
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
一本說明書和其他人之間的主要區別是「-F」 S說我不知道該怎麼做。這是到目前爲止,我已經試過了代碼的一個變化:
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)
}
}
我知道令牌因爲我用他們在其他請求自定義對象ID(cusObjID)工作。我試過噸變化對「appendBodyPart」部分,他們都給予我這樣的結果:
[Result]: SUCCESS: {
errors = (
"Wrong arguments"
);
}
和響應已列入
Status = "404 Not Found";
我已經看到了一些答案在這裏建議Alamofire的StackOverflow可能不適用於這種類型的上傳,所以如果有其他方法可以實現這一點,那也會很棒。真的,任何方式來完成我在iOS上使用iOS Quickblox SDK所做的工作就是我正在尋找的。
UPDATE
使用這個問題(Uploading file with parameters using Alamofire)的最後答案的編輯,我已經能夠得到進度更新的文件上傳
.progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in
Swift.print("\(totalBytesWritten)/\(totalBytesExpectedToWrite)")
}
但儘管如此我我仍然得到同樣的錯誤。順便說一句,這是我的請求頭看起來像成功的iOS版本:
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)";
}