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

Ios 从uploadTaskWithRequest:fromFile获取包含http正文的文件名:,ios,objective-c,objective-c++,Ios,Objective C,Objective C++,我有一个后台上传任务,其定义如下: NSURLSessionUploadTask*task=[session\uuuploadtaskwithrequest:request fromFile:[NSURL fileURLWithPath:httpBody]] 上传任务完成后,我想删除httpBody,这发生在我的委托中的此函数中: - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didComplet

我有一个后台上传任务,其定义如下:

NSURLSessionUploadTask*task=[session\uuuploadtaskwithrequest: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);
    }
}
-(void)URLSession:(NSURLSession*)会话任务:(NSURLSessionTask*)任务未完成错误:(NSError*)错误
{
Q_(会议);
如果(错误)
{
报告错误(回调,错误);
}
其他的
{
NSMutableData*responseData=self.responseData[@(task.taskIdentifier)];
如果(响应数据)
{
NSDictionary*response=[NSJSONSerialization JSONObject WithData:responseData选项:0错误:无];
如果(答复)
{

LOG_INFO您可以从任务中获取原始请求。如果其中没有可使用的内容,您可以将请求创建为NSMutableRequest以启动并使用:

+ (void)setProperty:(id)value 
         forKey:(NSString *)key 
      inRequest:(NSMutableURLRequest *)request;
将您的文件名添加到该文件中。您可以稍后通过以下方法获取此文件:

+ (id)propertyForKey:(NSString *)key 
       inRequest:(NSURLRequest *)request; 
更多信息:


您可以从任务中获取
原始请求。如果其中没有可使用的内容,您可以将请求创建为NSMutableRequest以启动并使用:

+ (void)setProperty:(id)value 
         forKey:(NSString *)key 
      inRequest:(NSMutableURLRequest *)request;
将您的文件名添加到该文件中。您可以稍后通过以下方法获取此文件:

+ (id)propertyForKey:(NSString *)key 
       inRequest:(NSURLRequest *)request; 
更多信息:


谢谢。我现在就试试看,如果它能解决的话,我会告诉你的。我来自C++背景,我对Objto-C(++)有点新的看法。有没有一个特殊的理由不把文件名添加到HTTP头的一部分?这样的东西用于存储文件名:<代码> [请求SETVals:HtpPoStHypHePeDeField:@“httpBODyFrfile”]
和类似的内容用于检索:
[task.originalRequest valueForHTTPHeaderField:@“httpBodyFile”]
原因是我不知道如何正确地从
NSURLProtocol
NSMutableURLRequest
或任何适当的类中进行子类化。您的组合标题应以x-appname开头-为了不干扰其他标题您如何在
handleEventsForBackgroundU中获得文件名,即
httpBody
RLSession < /COD>?我假设后台传输完成后调用这个问题。这可能是它自己的问题。看一下,你必须把会话拿回来,然后你可以得到任务。谢谢。我现在就试试看,如果你能解决的话,我会告诉你的。我来自C++背景,我对ObjuleC(++)有点新。。是否有特殊原因不将文件名添加为http标头的一部分?类似这样的原因用于存储文件名:
[request setValue:httpBody forHTTPHeaderField:@“httpBodyFile”]
以及类似这样的原因用于检索:
[task.originalRequest valueForHTTPHeaderField:@“httpBodyFile”]
原因是我不知道如何正确地从
NSURLProtocol
NSMutableURLRequest
或任何适当的类中进行子类化。您的组合标题应以x-appname开头-为了不干扰其他标题您如何在
handleEventsForBackgroundU中获得文件名,即
httpBody
RLSession
?我假设这是在后台传输完成时调用的。这可能是它自己的问题。看——你必须恢复会话,然后才能获得任务。