gpt4 book ai didi

ios - 使用 AFNetworking 2.0 上传图像

转载 作者:技术小花猫 更新时间:2023-10-29 10:59:56 27 4
gpt4 key购买 nike

我不明白为什么这这么难。网上所有的教程和文章似乎都在谈论1.0 api,这很没用。

我尝试了几种不同的方法并得到了不同的结果。我做错了什么?

  1. 上传任务 - 这似乎没有使用多部分形式,wtf?

    NSMutableURLRequest *request = [self.manager.requestSerializer multipartFormRequestWithMethod:@"POST"
    URLString:[[NSURL URLWithString:url relativeToURL:[NSURL URLWithString:ApiBaseUrl]] absoluteString]
    parameters:@{}
    constructingBodyWithBlock:nil];

    NSProgress *progress;
    NSURLSessionUploadTask *task = [self.manager uploadTaskWithRequest:request
    fromData:data
    progress:&progress
    completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
    NSLog(@"[error description] = %@", [error description]);
    } else {
    NSLog(@"success!");
    }
    }];

    [task resume];
  2. 张贴 block - 这似乎没有附加任何东西

    [self.manager POST:url
    parameters:@{}
    constructingBodyWithBlock:^(id <AFMultipartFormData> formData) {
    [formData appendPartWithFileData:data
    name:@"post[picture]"
    fileName:@"picture.jpg"
    mimeType:@"image/jpeg"];
    }
    success:^(NSURLSessionDataTask *task, id response) {
    NSLog(@"Success");
    }
    failure:^(NSURLSessionDataTask *task, NSError *error) {
    NSLog(@"Error: %@", error);
    }];
  3. 简单的帖子 - 这似乎几乎可以工作......但不是

    [self.manager POST:url
    parameters:@{@"post[picture][]":data}
    success:^(NSURLSessionDataTask *task, id response) {
    NSLog(@"Success");
    }
    failure:^(NSURLSessionDataTask *task, NSError *error) {
    NSLog(@"Error: %@", error);
    }];

我希望 1 工作,但我不确定为什么它不工作。

最佳答案

对于格式正确的“multipart/form-data”正文,您需要在创建请求时使用正文构造 block 。否则上传任务使用原始数据作为正文。例如,在您的 AFHTTPSessionManager 子类中:

NSString *urlString = [[NSURL URLWithString:kPhotoUploadPath relativeToURL:self.baseURL] absoluteString];
NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:urlString parameters:params constructingBodyWithBlock:^(id <AFMultipartFormData> formData) {
[formData appendPartWithFileData:photo.data name:@"photo" fileName:@"photo.jpg" mimeType:@"image/jpeg"];
}];

NSURLSessionUploadTask *task = [self uploadTaskWithStreamedRequest:request progress:progress completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {
if (error) {
if (failure) failure(error);
} else {
if (success) success(responseObject);
}
}];
[task resume];

或者,如果您不需要跟踪上传进度,您可以简单地使用:

[self POST:kPhotoUploadPath parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:photo.data name:@"photo" fileName:@"photo.jpg" mimeType:@"image/jpeg"];
} success:^(NSURLSessionDataTask *task, id responseObject) {
if (success) success(responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
if (failure) failure(error);
}];

关于ios - 使用 AFNetworking 2.0 上传图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19261253/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com