0

ファイル分析のためにエコーネストにサウンドを投稿しようとしています。POST メソッドは他のメソッドと何ら変わりはなく、echonest に依存していないと私は信じています。

これがドキュメントです。「アップロード」部分が必要です。

http://developer.ehonest.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\""}}}

初期化したデータである「トラック」パラメーターを既に指定していると思いました。誰でも私を助けることができますか?

4

1 に答える 1

2

数週間前に同じ問題が発生しました。そして、ここに私が見つけたものがあります。AFNetworking は、少し間違った multipart/form-data リクエストを行います。

AFHTTPClient.m ファイルでは、

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

彼らは、リクエストの最終境界の最後に kAFMultipartFormCRLF を 2 回配置しました。ただし、multipart/form-data ポスト リクエストの最後に 1 つの CRLF を含むリクエストを除く Echones のみです。どちらがHTTPプロトコル標準の観点から正しい方法かはわかりませんが、そのコード行を変更(kAFMultipartFormCRLFを削除)すると、コードがうまく機能すると思います。

参考までに、この回答を書いているときに、現在の AFNetworking Git リポジトリを調査したところ、この欠陥がわずか 5 日前に修正されていることがわかりました。したがって、最新のソースコードを使用して問題を解決できると思います。

于 2012-05-12T14:21:18.813 に答える