2009-11-22 6 views
2

J'utilise cocoahttpserver dans une application iphone, mais quand j'essaie de le télécharger (en cliquant sur un lien dans l'application de démonstration standard), mon fichier sqlite (myDatabase.sqlite) arrive sur mon Mac Bureau comme "Inconnu" sans suffixe du tout. Cependant, quand je "Enregistrer sous ..." il fournit le nom bien. Je préférerais enregistrer le fichier avec le suffixe sqlite.Modifier le nom du fichier de téléchargement dans Cocoahttpserver

Donc, ça doit être le suffixe causant les problèmes ????

Si c'est le problème, je n'arrive pas à trouver un moyen dans les classes pour télécharger le nom de fichier correct MAIS puis le changer en le présentant au navigateur (avec un suffixe comme .backup, ou .db, ou quelque chose ça marche). Quelqu'un sait où dans les classes pour changer le nom du fichier de téléchargement afin que le navigateur (Safari) ne l'appellera pas "inconnu"? Merci.

Répondre

1

J'ai trouvé quelqu'un d'autre code (de MyAppSales) et replyToHTTPRequest, j'ai ajouté l'en-tête Content-Disposition comme ci-dessous (dans une section de la méthode), et maintenant il fonctionne!

if(!isRangeRequest) 
     { 
      // Status Code 200 - OK 
      response = CFHTTPMessageCreateResponse(kCFAllocatorDefault, 200, NULL, kCFHTTPVersion1_1); 

      NSString *contentLengthStr = [NSString stringWithFormat:@"%qu", contentLength]; 
      CFHTTPMessageSetHeaderFieldValue(response, CFSTR("Content-Length"), (CFStringRef)contentLengthStr); 

      // ************* added this from MyAppSales 
      if ([httpResponse isKindOfClass:[HTTPFileResponse class]]) 
      { 
       NSString *baseName = [(NSString *)[(HTTPFileResponse *)httpResponse filePath] lastPathComponent]; 

       NSString *contentDispoStr = [NSString stringWithFormat:@"Content-Disposition: attachment; filename=\"%@\"", baseName]; 
       CFHTTPMessageSetHeaderFieldValue(response, CFSTR("Content-Disposition"), (CFStringRef)contentDispoStr); 
      } 

     } 
4

La bonne façon de le faire est d'utiliser les httpHeaders remplacement dans la classe de votre fichier async:

- (NSDictionary *)httpHeaders 
{ 
    NSString *key = @"Content-Disposition"; 
    NSString *value = [NSString stringWithFormat:@"attachment; filename=\"%@\"", [filePath lastPathComponent]]; 

    return [NSDictionary dictionaryWithObjectsAndKeys:value, key, nil]; 
} 
1

J'ai eu un même problème et a résolu le problème en changeant le code côté client. Du côté client, j'ajoute à l'attribut pour les balises.

<a href="/get" download="FILE_NAME">Download</a> 

Exemple:

<a href="/get" download="file.backup">Download</a> 
Questions connexes