从 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
我有一个按以下方式定义的后台上传任务:
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