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

Getting the filename that contains http body from uploadTaskWithRequest:fromFile:

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

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);
    }
}

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

您可以从任务中取回 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