我一直在寻找一种执行此方法的方法
curl -u username:password -H "Content-Type: application/binary" \
--data-binary @file.dat -X POST \
"https://helpdesk.zendesk.com/api/v2/uploads.json?filename=myfile.dat&token={optional_token}"
我尝试使用此
[afnetworkmanager POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:attachment.attachmentData name:@"image" fileName:attachment.fileName mimeType:attachment.mimeType];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
// TODO:
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
// TODO:
}];
但它没有帮助。目前我收到错误说
{
> "Cache-Control" = "max-age=0, private, must-revalidate";
> Connection = "keep-alive";
> "Content-Length" = 345;
> Server = "nginx/1.4.2";
> Status = "201 Created";
> "X-Content-Type-Options" = nosniff;
> "X-Runtime" = "1.471856";
> "X-UA-Compatible" = "IE=Edge,chrome=1";
> "X-Zendesk-API-Version" = v2;
> "X-Zendesk-API-Warn" = "Removed restricted keys [\"image\"] from parameters according to whitelist"; } },
> NSLocalizedDescription=Request failed: unacceptable content-type:
> text/plain}
我不明白我错在哪里。
答案 0 :(得分:7)
我最终通过使用AFURLSessionManager来实现这一点。这是完整的代码:
NSString *uploadAttachmentURL = @"https://mydomain.zendesk.com/api/v2/uploads.json?filename=screenshot.jpeg";
NSData *imageData = UIImageJPEGRepresentation(image, 1.0);
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
_afHTTPSessionManager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:configuration];
// hack to allow 'text/plain' content-type to work
NSMutableSet *contentTypes = [NSMutableSet setWithSet:_AFOpManager.responseSerializer.acceptableContentTypes];
[contentTypes addObject:@"text/plain"];
_afHTTPSessionManager.responseSerializer.acceptableContentTypes = contentTypes;
[_afHTTPSessionManager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"[USERNAME]" password:@"[PASSWORD]"];
[_afHTTPSessionManager POST:uploadAttachmentURL parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData name:@"screenshot" fileName:@"photo.jpg" mimeType:@"image/jpeg"];
} success:^(NSURLSessionDataTask *task, id responseObject) {
DDLogError(@"screenshot operation success! %@", responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
DDLogError(@"Operation Error: %@", error);
}];
答案 1 :(得分:0)
NSURLSessionConfiguration * configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
configuration.HTTPAdditionalHeaders = @{@"CS090-Version":[NSString stringWithFormat:@"ios_%@",VERSION];
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc]initWithSessionConfiguration:configuration];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:apiURL parameters:nil constructingBodyWithBlock:nil error:nil];
NSURLSessionUploadTask *uploadTask;
uploadTask = [manager uploadTaskWithRequest:request fromData:imgData progress:nil completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) {
if (error) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"%@ %@", response, responseObject);
}
}];
[uploadTask resume];