使用 AFNetworking 上传文件

Posted

技术标签:

【中文标题】使用 AFNetworking 上传文件【英文标题】:Upload file with AFNetworking 【发布时间】:2011-10-12 06:26:37 【问题描述】:

我的后端编码器为我提供了文件上传的 curl 示例:

curl -v -F dictation_file=@file.name -F category=1 http://my.server.com/files/create/

我正在使用 AFNetworking,但以下代码不起作用:

NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
    [parameters setObject:title forKey:@"title"];
    [parameters setObject:category forKey:@"category"];

    NSMutableURLRequest *request = [self multipartFormRequestWithMethod:@"POST" 
                                                                   path:@"files/create/" 
                                                             parameters:parameters 
                                              constructingBodyWithBlock:^(id <AFMultipartFormData> formData) 
                                                  NSData *data= [NSData dataWithContentsOfFile:record.filePath];
                                                  [formData appendPartWithFileData:data mimeType:@"application/octet-stream" name:@"dictation_file"];
                                              ];

    AFHTTPRequestOperation *operation = [AFHTTPRequestOperation operationWithRequest:request 
                                                                          completion:^(NSURLRequest *request, NSHTTPURLResponse *response, NSData *data, NSError *error) 
     // handlecodehere
];

但是,在响应 json 时,我收到了 dictation_file 字段为空的信息。可能是我不明白卷曲? @file.name 只是在字段中替换编码数据,对吗?

【问题讨论】:

【参考方案1】:

我不得不修改 appendPartWithFileData:mimeType:name: 方法。

在这一行

[mutableHeaders setValue:[NSString stringWithFormat:@"file; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; 

我写的是表单数据而不是 文件

【讨论】:

如果服务器不需要文件,您应该使用-appendPartWithFormData:name:。无需更改实现。

以上是关于使用 AFNetworking 上传文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 AFNetworking 上传多个图像或文件,

afnetworking 多文件上传

AFNetworking 文件上传

AFNetworking 多文件上传

AFNetworking 上传文件

AFNetworking 上传使用 forKey 引用的文件