2016-07-22 13 views
1

ビデオをサーバーにプッシュする際に問題があります。私のAPIにはbodyの2つのパラメータがあります:詳細とファイルです。ヘッダーのトークンで認証する必要があります。マルチパート形式のデータでサーバーにビデオを送信する

私のファイルが準備され、メソッドにプッシュしているURLにエクスポートされました。次に詳細(文字列の値)と私はそれをサーバー上で送信する準備をしようとしています。

私は私のアプリを実行した後、私はこのエラーを持っている: https://mindfiremobile.wordpress.com/2014/01/27/upload-video-to-server-using-multiparts/:応答で

Error Domain=NSCocoaErrorDomain Code=3840 "No value." UserInfo={NSDebugDescription=No value.}

Serverは、私はいくつかの最初の一歩を作るしようとするこのチュートリアルを使用JSON

押し込ま映像に関するすべてのデータを返します。

私の最初のステップは、サーバー上でビデオをプッシュすることで、私は助けてくれるでしょう。

func postDetailsWithVideo(details: String, file: NSURL) { 
    let url = serverURL.URLByAppendingPathComponent("api/details") 

    let videoData = NSData.init(contentsOfURL: file) 

    let kBoundary = "---------------------------14737809831466499882746641449" 
    let kStartTag = "--%@\r\n" 
    let kEndTag = "\r\n" 
    let kContent = "Content-Disposition: form-data; name=\"%@\"\r\n\r\n" 

    let body = NSMutableData() 

    //details data 
    body.appendData(String(format: kStartTag, kBoundary).dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData(String(format: kContent, "storyDetails").dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData(details.dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData(String(format: kEndTag).dataUsingEncoding(NSUTF8StringEncoding)!) 

    //Video data 
    body.appendData(String(format: kStartTag, kBoundary).dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData("Content-Disposition: form-data; file=\"flv\"\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData("Content-Type: application/octet-stream\r\n\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 
    body.appendData(NSData(data: videoData!)) 
    body.appendData(String(format: kEndTag).dataUsingEncoding(NSUTF8StringEncoding)!) 

    // close form 
    body.appendData("--\(kBoundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding)!) 

    let contentType = "multipart/form-data; boundary=\(kBoundary)" 

    let request = NSMutableURLRequest(URL: url) 
    request.HTTPMethod = "POST" 
    request.setValue("Bearer \(DataManager().getAccessToken())", forHTTPHeaderField: "Authorization") 
    request.setValue(contentType, forHTTPHeaderField: "Content-Type") 
    request.HTTPBody = body 

    print(body) 

    postDataOnTheServer(request, apiMethod: "api/details") 

} 

func postDataOnTheServer(request: NSMutableURLRequest, apiMethod: NSString) { 
     let currentRequest = request 

     let task = NSURLSession.sharedSession().dataTaskWithRequest(currentRequest){ data, response, error in 
      if error != nil{ 
       self.delegate?.errorOccured(apiMethod, error: error!) 
       return 
      } 

      do { 
       let result = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [String:AnyObject] 

       self.delegate?.serverResponseFromAPIMethod(apiMethod, result: result!) 

      } catch { 
       print("response - some error") 
       print(error) //do something with me 
      } 
     } 

     task.resume() 
    } 

答えて

1

これはサーバーの問題です。バックエンドに何もエコーしないようにしてください。応答が返されます。

関連する問題