2016-08-14 4 views
1

Swift로 작성된 OS X 프로젝트에서 Quickblox 서버에 sqlite 파일을 업로드하려고합니다. 내가 Alamofire을 사용하고, OS X와 ​​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() 
        }) 

이 한 일을 다른 요청을받은하지만하지 않은 : 난 이미 Quickblox 아이폰 OS SDK와 iOS에서이 문제를 알아 냈어요. 자신의 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"의입니다.

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

을 포함하고있다 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만큼 쉽게).