AFNetworking POST文件失败(最快?)

时间:2012-05-04 20:22:33

标签: ios post afnetworking

我正在尝试将声音发布到echo nest以进行文件分析。 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\""}}}

我以为我已经给了&#34;轨道&#34;参数是我初始化的数据。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

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

在AFHTTPClient.m文件中,

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

他们在请求的最终边界结束时将kAFMultipartFormCRLF放两次。 但是Echonest除了在multipart / form-data post请求结束时请求一个CRLF之外。 我不知道在HTTP协议标准方面哪一个是正确的方式,但是如果你修改那个代码行(删除一个kAFMultipartFormCRLF),我认为你的代码会运行良好。

仅供参考,在撰写此答案时,我探讨了目前的AFNetworking Git回购,并发现这个缺陷在5天前就得到了解决。所以我想你可以使用最新的源代码来解决问题。