2016-08-14 6 views
1

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)"; 
} 

答えて

2

OK、私はAlamofireでしばらく苦労し、決してそれが私はそれが望んで行うようになりました。私は別のフレームワークSwiftHTTP(https://github.com/daltoniam/SwiftHTTP)に切り替えました。簡単に(Quickblox iOS SDKの場合と同じくらい簡単に)完了できました:

関連する問題