ASIHTTPRequest不会更新进度

时间:2012-08-15 09:35:06

标签: ios asihttprequest progress

更新

我认为问题出在networkQueue上。当我用 [request startAsynchronous] [request startSynchronous] 替换 [self.networkQueue addOperation:request] 时,它可以正常工作。

我更新代码以使其更清晰。

原始

我使用ASIHTTPRequest上传带有编码图像的json文件(或[request setFile:imagefile ...]),但我无法更新进度。

我只有一个输出:值:1.000000 ,表示上传已完成。

从未触发

incrementUploadSizeBy

我在线搜索了很多但仍无法找到答案。这是我的代码。

+ (ASIEngine *)sharedInstance {
    static ASIEngine *sharedInstance = nil;
    static dispatch_once_t pred;

    dispatch_once(&pred, ^{
        sharedInstance = [[self alloc] init];
    });

    return sharedInstance;
}

- (id)init {
    if (self = [super init]) {
        _networkQueue = [ASINetworkQueue queue];
        [_networkQueue setMaxConcurrentOperationCount:MAX_CONCURRENT_OPERATION_COUNT];
        [_networkQueue setDelegate:self];
        [_networkQueue go];
    }
    return self;
}

    - (void)upload:(NSString *)imageJsonString onCompletion:(void(^)(NSString *responseString))onCompletion onFailed:(void(^)(NSError *error))onFailed {

        __unsafe_unretained __block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:UPLOAD_URL]];
        [request setShowAccurateProgress:YES];
        [request setUploadProgressDelegate:self];

        [request setPostValue:imageJsonString forKey:@"imageString"];

        [request setCompletionBlock:^{
            NSString *responseString = [request responseString];
            onCompletion(responseString);
        }];

        [request setFailedBlock:^{
            onFailed([request error]);
        }];

        [self.networkQueue addOperation:request];
    }

    #pragma mark - ASIProgressDelegate

    - (void)setProgress:(float)newProgress {
        NSLog(@"value: %f", newProgress);
    }

    - (void)request:(ASIHTTPRequest *)request incrementUploadSizeBy:(long long)newLength {
        NSLog(@"data length: %lld", newLength);
    }

1 个答案:

答案 0 :(得分:1)

如果您要上传字符串,您上传的数据可能很少(而不是上传图片时),只需一步即可上传所有内容。您可以尝试从文件中读取一个巨大的字符串,看看会发生什么。