0

我正在尝试发布声音以回声巢进行文件分析。POST 方法与任何其他方法没有什么不同,我相信它不依赖于 echonest。

这是文档。我需要“上传”部分。

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\""}}}

我以为我已经将“track”参数作为我初始化的数据。谁能帮我?

4

1 回答 1

2

几周前我遇到了同样的问题。这就是我发现的。AFNetworking 发出稍微错误的多部分/表单数据请求。

在 AFHTTPClient.m 文件中,

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

他们将 kAFMultipartFormCRLF 两次放在请求的最终边界的末尾。但 Echonest 仅在多部分/表单数据发布请求末尾带有一个 CRLF 的请求除外。我不知道哪一个是 HTTP 协议标准的正确方式,但是如果您修改该代码行(删除 kAFMultipartFormCRLF),我认为您的代码会运行良好。

仅供参考,在写这个答案时,我探索了当前的 AFNetworking Git repo,发现这个缺陷在 5 天前已经修复。所以我想你可以使用最新的源代码来解决这个问题。

于 2012-05-12T14:21:18.813 回答