Ios 使用AFNetworking以异步方式将文件上传到Strava V3 API

Ios 使用AFNetworking以异步方式将文件上传到Strava V3 API,ios,afnetworking,Ios,Afnetworking,我想从iOS向Strava发布一个活动 Strava文档()的示例如下所示: 示例请求 $ curl -X POST https://www.strava.com/api/v3/uploads \ -F access_token=83ebeabdec09f6670863766f792ead24d61fe3f9 \ -F activity_type=ride \ -F file=@test.fit \ -F data_type=fit 在这种情况下,文件test.

我想从iOS向Strava发布一个活动

Strava文档()的示例如下所示:

示例请求

$ curl -X POST https://www.strava.com/api/v3/uploads \
    -F access_token=83ebeabdec09f6670863766f792ead24d61fe3f9 \
    -F activity_type=ride \
    -F file=@test.fit \
    -F data_type=fit
在这种情况下,文件test.fit是要发布的活动

我正在尝试使用AFNetworking异步发布此消息。我有以下测试代码:

NSURL *url = [NSURL URLWithString:@"https://www.strava.com"];

AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];

NSData *fileData = [NSData dataWithContentsOfFile:filename];

AFOAuthCredential *credential = [AFOAuthCredential retrieveCredentialWithIdentifier:kStravaTokenStored];

NSString *accessToken = credential.accessToken;

NSDictionary *parameters = @{@"access_token": accessToken, @"activity_type" : @"ride",@"data_type" : @"fit", @"name" : @"Test", @"stationary" : @"1" };

NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/api/v3/uploads" parameters:parameters constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {
[formData appendPartWithFileData:fileData name:@"Test" fileName:@"Test.fit" mimeType:@"application/octet-stream"];
}];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];

[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
}];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

    NSLog(@"succss %@", responseObject);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    NSLog(@"failure %@ \n\n %@", error, operation);

}];

[httpClient enqueueHTTPRequestOperation:operation];
NSURL*url=[NSURL URLWithString:@”https://www.strava.com"];
AFHTTPClient*httpClient=[[AFHTTPClient alloc]initWithBaseURL:url];
NSData*fileData=[NSData dataWithContentsOfFile:filename];
AFOAuthCredential*credential=[AFOAuthCredential retrieveCredentialWithIdentifier:kStravaTokenStored];
NSString*accessToken=credential.accessToken;
NSDictionary*参数=@{“访问令牌”:访问令牌,“活动类型”:“行驶”、“数据类型”:“适合”、“名称”:“测试”、“静止”:“1”);
NSMutableURLRequest*request=[httpClient multipartFormRequestWithMethod:@“POST”路径:@“/api/v3/uploads”参数:参数constructingBodyWithBlock:^(id formData){
[formData appendPartWithFileData:fileData名称:@“Test”文件名:@“Test.fit”mimeType:@“应用程序/八位字节流”];
}];
AFHTTPRequestOperation*操作=[[AFHTTPRequestOperation alloc]initWithRequest:request];
[操作设置LoadProgressBlock:^(NSUTEGER字节写入、long long TotalBytesWrite、long long totalBytesExpectedToWrite){
NSLog(@“已发送%lld个字节,共%lld个字节”,TotalBytesWrite,totalBytesExpectedToWrite);
}];
[操作setCompletionBlockWithSuccess:^(AFHTTPRequestOperation*操作,id响应对象){
NSLog(@“成功%@”,响应对象);
}失败:^(AFHTTPRequestOperation*操作,NSError*错误){
NSLog(@“故障%@\n\n%@”,错误,操作);
}];
[httpClient排队HttpRequestOperation:operation];
目前我看到以下错误:

错误域=AFNetworkingErrorDomain代码=-1011“预期状态代码 在(200-299)中,获得了400“UserInfo=0x9b62300 {NSLocalizedRecoverySuggestion={“消息”:“错误” 请求“,”错误“:[{“资源”:“上载”,“字段”:“数据”,“代码”:“空”}]}

有人知道我错过了什么吗

谢谢蚂蚁

这是必须的

[formData appendPartWithFileData:fileData name:@"file" fileName:@"Test.fit" mimeType:@"application/octet-stream"]

还是没有?

你说得对。谢谢你。我只需要把名字改成文件。我甚至都没看到。谢谢!