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
この説明と他人との間の1つの主な違いは、私が何をすべきかわからない「-F」のです。
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)の仕事を知っている:ここでは私がこれまで試したコードの一のバリエーションがあります。私はここにいくつかの答えを見てきました
[Result]: SUCCESS: {
errors = (
"Wrong arguments"
);
}
と応答が
Status = "404 Not Found";
を含んでいた:私は「appendBodyPart」部分にバリエーションのトンを試してみた、そして、彼らはすべて私にこの結果を与えてくれましたStackOverflowは、Alamofireがこのタイプのアップロードにはうまくいかない可能性があることを示唆しています。これを達成するための他の方法がある場合は、それも素晴らしいでしょう。実際、iOS Quickblox SDKを使ってiOSで行ったことを達成する方法は、私が探しているものです。この質問(Uploading file with parameters using Alamofire)の最後の回答の編集を使用して
UPDATE
は、私は、ファイルのアップロード
.progress { (bytesWritten, totalBytesWritten, totalBytesExpectedToWrite) in
Swift.print("\(totalBytesWritten)/\(totalBytesExpectedToWrite)")
}
として更新するように進捗状況を取得することができたが、それにもかかわらずIましたまだ同じエラーが出ています。ちなみに、これは私のリクエストヘッダが成功した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)";
}