2012-05-04 29 views
0

我想發佈一個聲音回聲嵌套進行文件分析。 POST方法與其他方法沒有區別,我相信它不是最依賴的。AFNetworking POST文件失敗(回聲?)

這裏是文檔。我需要「上傳」部分。

http://developer.echonest.com/docs/v4/track.html

NSURLRequest *request = [self multipartFormRequestWithMethod:@"POST" path:[NSString stringWithFormat:@"track/upload", self.apiKey] parameters:dictionary constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 

    [formData appendPartWithFileData:data name:@"track" fileName:[path lastPathComponent] mimeType:@"multipart/form-data"]; 
}]; 
AFURLConnectionOperation *operation = [self HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"done"); 
    NSLog(@"response: %@", operation.responseString); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"error: %@", error.description); 
    NSLog(@"response: %@", operation.responseString); 
    NSLog(@"headers: %@", operation.request.allHTTPHeaderFields.description); 
    NSLog(@"operation url: %@", operation.request.URL.absoluteString); 
}]; 

不過,我有問題。這是我的迴應:

{"response": {"status": {"version": "4.2", "code": 4, "message": "track - Missing Parameter: track or url is required with a POST content-type of \"application/x-www-form-urlencoded\" or \"multipart/form-data\""}}} 

我以爲我已經給了「跟蹤」參數是我初始化的數據。誰能幫我?

+1

使用CharlesProxy查看您實際上在線路上發送的內容。 – JosephH

+0

還沒有解決我的問題,但+1,因爲你給我看了一個非常有用的程序。 – csotiriou

+0

那麼,這是一個開始我猜:-) charlesproxy輸出顯示你正在發送'曲目'部分?如果沒有,他們的「捲曲」例子適合你嗎?如果他們這樣做,請比較charlesproxy爲curl和代碼顯示的內容。 – JosephH

回答

2

幾周前我遇到過同樣的問題。這是我發現的。 AFNetworking使多部分/表單數據請求稍有錯誤。

在AFHTTPClient.m文件,

static inline NSString * AFMultipartFormFinalBoundary() { 
    return [NSString stringWithFormat:@"%@--%@--%@%@", kAFMultipartFormCRLF, kAFMultipartFormBoundary, kAFMultipartFormCRLF, kAFMultipartFormCRLF]; 
} 

他們把kAFMultipartFormCRLF兩次請求的最終邊界的結束。 但是隻有在多部分/表單數據發佈請求結束時,除了具有一個CRLF的請求之外的回聲。 我不知道哪一個是HTTP協議標準中正確的方法,但是如果您修改該代碼行(刪除kAFMultipartFormCRLF),我認爲您的代碼可以正常工作。我寫這個答案的時候,我探索了當前的AFNetworking Git repo,發現這個缺陷在5天前就已經修復了。所以我想你可以使用最新的源代碼來解決這個問題。