[英]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
属性,因此请勿对此请求对象设置HTTPBodyStream
或HTTPBody
,因为它将清除多部分表单主体流。 @param方法请求的HTTP方法。 此参数不能为GET
或HEAD
或nil
。 @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.