繁体   English   中英

如何与服务器交互以从我的应用程序上传文件(图片)

[英]How to interface with the server to upload files (pictures) from my app

因此,我尝试使用他们的Web服务(称为UploadFile )将文件(图片)上传到服务器,该服务需要2个变量。

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

我如何与此服务器交互以使请求通过? 通常,当我提取/发布信息时,我只是在进行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];

谢谢,艾伦

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

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

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

@return NSMutableURLRequest对象* /

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM