所以我尝试使用名为UploadFile
的Web服务将文件(图片)上传到服务器,该服务需要2个变量。
FileInfo info
和int requestId
(在我的情况下总是0)
FileInfo
对象包含多个变量name
(字符串),description
(字符串),content
(文件的二进制数据,在这种情况下,它将是图像), id
(字符串)和name
(字符串)
如何与此服务器连接以使请求通过?通常当我一直在拉/发信息时我刚刚做JSON调用,但我猜测上传是不同的。当服务需要传递自定义对象时,我不确定如何执行此操作。
我是否需要在App中创建对象?
我正在尝试使用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];
谢谢, 艾伦
答案 0 :(得分:0)
如果您看到了methode 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参数要编码和设置的参数 请求HTTP正文。 @param block一个接受单个参数的块 并将数据附加到HTTP正文。 block参数是一个对象 采用AFMultipartFormData
协议。这可以用来 上传文件,将HTTP主体编码为JSON或XML,或指定多个 相同参数的值,可以是数组值的值。@return
NSMutableURLRequest
对象* /
答案 1 :(得分:0)
参考这个。他们给出了不同的方法: https://github.com/AFNetworking/AFNetworking