2009-11-22 73 views
2

我在iPhone应用程序中使用cocoahttpserver,但是当我尝试下载它时(通过单击标准演示应用程序中的链接),我的sqlite文件(myDatabase.sqlite)到达我的Mac桌面为“未知”,根本没有后缀。但是,当我“另存为...”时,它提供了正确的名称。我更喜欢用sqlite后缀来保存文件。更改下载Cocoahttpserver中的文件名

那么,它一定是造成问题的后缀?

如果这是问题,我似乎无法在类中找到下载正确文件名的方法,但在将其呈现给浏览器时(使用.backup或.db之类的后缀或其它这样可行)。

任何人都知道在哪里更改下载文件名,以便浏览器(Safari)不会称它为“未知”?谢谢。

回答

1

我发现了别人的代码(MyAppSales),并在replyToHTTPRequest中,我添加了Content-Disposition标题,如下所示(在该方法的一个部分),现在它的工作原理!

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

正确的方式做,这是使用httpHeaders在异步文件类重写:

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

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

我有同样的问题,并通过改变客户端代码解决了这个问题。在客户端,我添加下载属性到标签。

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

例如:

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