从uploadTaskWithRequest获取包含http body的文件名:fromFile:

时间:2017-10-25 19:47:46

标签: ios objective-c objective-c++

我有一个后台上传任务,按以下方式定义:

NSURLSessionUploadTask* task = [session_ uploadTaskWithRequest:request fromFile:[NSURL fileURLWithPath:httpBody]];

我想在上传任务完成后删除httpBody,这在我的代理中发生在此函数中:

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
    Q_UNUSED(session);
    if (error)
    {
        reportError(callback, error);
    }
    else
    {
        NSMutableData *responseData = self.responsesData[@(task.taskIdentifier)];
        if (responseData)
        {
            NSDictionary *response = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:nil];
            if (response)
            {
                LOG_INFO << [NSString stringWithFormat:@"%@", response];
            } 
            else
            {
                LOG_INFO << [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
            }
        [self.responsesData removeObjectForKey:@(task.taskIdentifier)];
        }
        (*callback)(boost::none);
    }
}

我不确定如何访问httpBody中的didCompleteWithError,以便删除它。我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以从任务中取回originalRequest。如果没有任何内容可供使用,您可以创建请求作为NSMutableRequest来启动和使用:

+ (void)setProperty:(id)value 
         forKey:(NSString *)key 
      inRequest:(NSMutableURLRequest *)request;

将文件名添加到其中。您可以稍后通过以下方式获取:

+ (id)propertyForKey:(NSString *)key 
       inRequest:(NSURLRequest *)request; 

更多信息:

https://developer.apple.com/documentation/foundation/nsurlprotocol/1407897-setproperty?language=objc