1

所以我正在尝试使用他们的网络服务将文件(图片)上传到服务器UploadFile需要 2 个变量。

FileInfo info和 a int requestId(在我的情况下始终为 0)该FileInfo对象包含多个变量name(字符串)、description(字符串)、content(文件的二进制数据,在这种情况下它将是图像)、id(字符串)和name(字符串)

如何与此服务器交互以使请求通过?通常,当我一直在拉/发布信息时,我只是在进行 JSON 调用,但我猜上传是不同的。当服务需要传递自定义对象时,我不确定如何执行此操作。

我需要在我的应用程序中创建对象吗?

我正在尝试使用 AFNetworking 的AFHTTPRequestOperations

我正在尝试将他们的示例用作跳板,但我仍然需要确保在他们的上传示例中进行哪些更改,因为该示例使用直接上传图像并且我需要上传 FileInfo 对象而不是 jpeg。

               NSURL *url = [NSURL URLWithString:@"https://SomeDomain.com/Services/FileService.svc/UploadFile"];
                AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url];
                NSData *imageData = UIImageJPEGRepresentation([self.photoImageView image], 0.5);

                NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/upload" parameters:nil constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {

                    [formData appendPartWithFileData:imageData name:@"avatar" fileName:@"Upload.jpg" mimeType:@"image/jpg"];

                }];

                NSLog(@"Request %@", [request description]);

                AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
                NSLog(@"Operation: %@", [operation description]);
                [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(@"RESPONSE: %@", [responseObject description]);
                } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
                    NSLog(@"Failed: %@", [error description]);
                }];
                [httpClient enqueueHTTPRequestOperation:operation];

谢谢,艾伦

4

2 回答 2

0

如果您看到方法 multipartFormRequestWithMethod 的 AFNetworking 文档...您有一个 Dictionnary 参数,您可以在其中放置 Web 服务所需的所有信息。

NSMutableURLRequest/**使用指定的 HTTP 方法和路径创建一个对象,并multipart/form-data使用指定的参数和多部分表单数据块构造一个 HTTP 正文。见 http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.2

多部分表单请求会自动流式传输,直接从磁盘读取文件以及单个 HTTP 正文中的内存数据。结果NSMutableURLRequest对象有一个HTTPBodyStream 属性,所以不要在这个请求对象上设置HTTPBodyStreamHTTPBody,因为它会清除多部分表单主体流。@param method 请求的 HTTP 方法。此参数不能是GETor HEAD, or nil。@param path 要附加到 HTTP 客户端的基本 URL 并用作请求 URL 的路径。@param parameters 要在请求 HTTP 正文中编码和设置的参数。@param block 接受单个参数并将数据附加到 HTTP 正文的块。block 参数是一个对象,采用AFMultipartFormData协议。这可用于上传文件、将 HTTP 正文编码为 JSON 或 XML,或为同一参数指定多个值,就像为数组值指定多个值一样。

@return 一个NSMutableURLRequest对象 */

于 2013-06-06T13:30:03.813 回答
0

参考这个。他们给出了不同的方法: https ://github.com/AFNetworking/AFNetworking

于 2015-04-10T09:11:24.660 回答