2011-11-04 38 views
16

Người đàn ông, bối rối về điều này. Đang cố gắng tải xuống tệp có số AFNetworking và tốt nhất tôi có thể làm là ghi lại các byte tiến trình trong tệp tải xuốngProjectBlock. Tôi đã thử nhiều nhánh khác nhau của AFNetworking và bây giờ tôi đã quay lại bản dựng mới nhất. Có vẻ như một lúc AFHTTPRequestOperation đã được sửa đổi để bao gồm cả NSURLResponse nhưng nó đã biến mất trong bản phát hành mới nhất. Và, theo mã bên dưới, khối "thành công" không bao giờ được gọi. Tôi nhận được một bản ghi của các byte tải về và sau đó^hoàn thành được gọi là. thành công và lỗi không bao giờ được gọi.AFNetworking - Sử dụng AFHTTPRequestOperation để tải xuống tệp?

Mọi hướng dẫn về điều này sẽ thật tuyệt vời. Tôi không thể tìm ra nơi dữ liệu được trả về và làm thế nào để có được nó để sử dụng NSFileManager trên nó? Tôi cần tải xuống tệp, không viết luồng cho hình ảnh, v.v.

Chỉnh sửa: Tôi cũng đã cố gắng ghi dữ liệu bằng cách ghi đè - (void) connection: didReceiveData như được đề xuất trong tài liệu nhưng không có gì ở đó.

// url là http://mydomain.com/somezip.zip

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@", url]]]; 

AFHTTPRequestOperation *operation = [AFHTTPRequestOperation HTTPRequestOperationWithRequest:request success:^(id object) { 

    NSLog(@"hey, some success!"); 

} failure:^(NSHTTPURLResponse *response, NSError *error) { 

    NSLog(@"%@", error); 

}]; 


[operation setDownloadProgressBlock:^(NSInteger bytesRead, NSInteger totalBytesRead, NSInteger totalBytesExpectedToRead) { 

    // callback is sent in and works great. Just outputting to the console at the moment 
    SEL callme = NSSelectorFromString(callback); 
    [sender performSelectorOnMainThread:callme withObject:[NSNumber numberWithInt:bytesRead] waitUntilDone:NO]; 

}]; 

[operation setCompletionBlock:^{ 
    NSLog(@"operation complete"); 
}]; 

NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease]; 
[queue addOperation:operation]; 

Trả lời

64

Bạn chỉ có thể sử dụng tính năng này được bao gồm trên AFNetworking và thậm chí lưu nó vào đĩa - Thông báo các operation.outputStream:

NSMutableURLRequest* rq = [api requestWithMethod:@"GET" path:@"YOUR/URL/TO/FILE" parameters:nil]; 
AFHTTPRequestOperation *operation = [[[AFHTTPRequestOperation alloc] initWithRequest:rq] autorelease]; 

NSString* path=[@"/PATH/TO/APP" stringByAppendingPathComponent: imageNameToDisk]; 
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO]; 

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 

    NSLog(@"SUCCCESSFULL IMG RETRIEVE to %@!",path) 

} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

    // Deal with failure 
}]; 

EDIT: missed

[operation start]; 

EDIT: ...or if you use an AFHTTPClient * apiClient :

// [apiClient enqueueHTTPRequestOperation:operation]; 
+3

Ai đó cung cấp cho người đàn ông này một phiếu bầu tán thành! Và OP nên chọn câu trả lời! – radj

Các vấn đề liên quan