保存到服务器后检索图像

时间:2015-04-23 04:46:58

标签: objective-c nsurl

我编写的代码将图像上传到服务器,但我不确定如何在上传图像后检索图像。我尝试使用NSURL请求,但从未调用过receiveData委托方法。下面我已经包含了与上传图片相关的所有相关代码,然后我尝试使用NSURL请求来提取数据。从概念上讲,我做错了吗?谢谢。

- (IBAction)nextButtonPressed:(id)sender {
[self.signupController uploadProfilePicture:UIImagePNGRepresentation(self.imageView.image) completion:^(NSError *error){
    [[NSOperationQueue mainQueue] addOperationWithBlock:^{
        [[SyncController sharedInstance] sync];
        [self performSegueWithIdentifier:@"addFriendsSegue" sender:self];
    }];
}];
}

uploadProfilePicture方法:

- (void)uploadProfilePicture:(NSData *)imageData completion:(void (^)(NSError *error))completion {
BRUser *user = [BRSession userWithContext:[[BRCoreDataManager sharedManager] mainContext]];
[self.apiClient uploadProfilePicture:imageData forUser:user parameters:nil completion:[self uploadProfilePictureHandlerWithCompletion:completion]];
}

然后,这也是API客户端中的上传个人资料图片方法:

- (void)uploadProfilePicture:(NSData *)imageData forUser:(BRUser *)user parameters:(NSDictionary *)parameters completion:(BRAPIClientCompletionBlock)completion {
NSError *error;
NSURLRequest *request = [self.requestSerializer multiformRequestForAPIAction:BRAPIActionCreate nestedResource:@"image" parent:user data:imageData parameters:parameters error:&error];
if (error) {
    completion(nil, error);
}
NSURLSessionDataTaskCompletionBlock dataTaskCompletion = [self requestHandlerWithHTTPStatusErrors:@{ @400 : @(BRAPIUnauthorized) }  completion:completion];
NSURLSessionDataTask *task = [self.authURLSession dataTaskWithRequest:request completionHandler:dataTaskCompletion];
[task resume];
}

和前一种方法中调用的multiform方法:

- (NSURLRequest *)multiformRequestForAPIAction:(BRAPIAction)action nestedResource:(id)resource parent:(id)parent data:(NSData *)data parameters:(NSDictionary *)parameters error:(NSError *__autoreleasing *)error {
NSParameterAssert(action);
NSParameterAssert(resource);
NSParameterAssert(parent);
NSParameterAssert(data);

NSString *method = [BRAPIRequestSerializer HTTPMethodForAPIAction:action];
NSURL *url = [self.apiURL nestedURLForResource:resource parent:parent];
NSLog(@"URL: %@",[url absoluteStringWithTrailingSlash]);

return [self.serializer multipartFormRequestWithMethod:method
                                             URLString:[url absoluteStringWithTrailingSlash]
                                            parameters:parameters
                             constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
                                 [formData appendPartWithFileData:data name:@"image" fileName:@"image.png" mimeType:@"image/png"];
                             }
                                                 error:error];
}

我尝试通过以下网址检索数据失败:

-(void) downloadImageFromURL :(NSString *)imageUrlString{
// Create the request.
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:imageUrlString]
                                          cachePolicy:NSURLRequestUseProtocolCachePolicy
                                      timeoutInterval:60.0];

// Create the NSMutableData to hold the received data.
// receivedData is an instance variable declared elsewhere.
NSData * receivedData = [[NSMutableData alloc] init];

// create the connection with the request
// and start loading the data
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (!theConnection) {
    // Release the receivedData object.
    receivedData = nil;

    // Inform the user that the connection failed.
    NSLog(@"connection falied");
} else {
    NSLog(@"connection succesful");
};

}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{

    NSLog(@"data: %@",data);
}

我还确保包含NSURLConnectionDelegate。永远不会调用didRecieveData方法。

如果您需要查看更多代码,请随时告诉我们!

0 个答案:

没有答案
相关问题