2012-04-23 5 views
0

Я сейчас проверяю этот заголовок, и если он доступен, я попытаюсь получить имя файла из него. Вопрос в том, что лучший способ получить его? Я понимаю, что заголовок Content-Disposition может отображаться с разными параметрами. Примеры ниже:Получить имя файла из заголовка Content-Disposition

Content-Disposition = "inline; filename=sample-file-123.pdf" 
Content-Disposition = "attachment; filename="123.zip"" 

Мне только интересно получить имя файла.

ответ

3

Я хотел бы сделать что-то вдоль линий этого:

- (NSString *)getFilenameFrom:(NSString *)string { 
    NSRange startRange = [string rangeOfString:@"filename="]; 

    if (startRange.location != NSNotFound && startRange.length != NSNotFound) { 
     int filenameStart = startRange.location + startRange.length; 
     NSRange endRange = [string rangeOfString:@" " options:NSLiteralSearch range:NSMakeRange(filenameStart, [string length] - filenameStart)]; 
     int filenameLength = 0; 

     if (endRange.location != NSNotFound && endRange.length != NSNotFound) { 
      filenameLength = endRange.location - filenameStart; 
     } else { 
      filenameLength = [string length] - filenameStart; 
     } 

     return [string substringWithRange:NSMakeRange(filenameStart, filenameLength)]; 
    } 
    return nil; //or return @"", whatever you like 
} 

Вы должны проверить это, как я сделал это в браузере (не имеют доступ к Xcode атм).

+0

Спасибо, я изменил ответ выше, чтобы удовлетворить случаи, когда отправляется заголовок Content-Disposition, но без параметра имени файла. – XCool

+0

я исправил вышеуказанный код, чтобы вернуть имя файла без «» «.. кстати спасибо dragon112 :) – Gabrail

2
+ (NSString *)filenameFromContentDispositionHeader:(NSString *)contentDispositionHeader { 
    NSString *pattern = @"filename=\"(.*)\""; 
    NSRegularExpression *regex = 
     [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil]; 
    NSTextCheckingResult *result = 
     [regex firstMatchInString:contentDispositionHeader 
         options:0 
          range:NSMakeRange(0, contentDispositionHeader.length)]; 
    NSRange resultRange = [result rangeAtIndex:0]; 

    if (resultRange.location == NSNotFound) { 
    return nil; 
    } else { 
    return [contentDispositionHeader substringWithRange: 
     NSMakeRange(resultRange.location + 10, resultRange.length - 11)]; 
    } 
} 

Обратите внимание, что вам необходимо изменить шаблон, если вы не можете быть уверены, что имя файла окружено двойными кавычками.

Смежные вопросы