我在iphone应用程序中使用cocoahttpserver,但是当我尝试下载它时(通过单击标准演示应用程序中的链接),我的sqlite文件(myDatabase.sqlite)以“未知”的形式到达我的Mac桌面完全没有后缀。但是,当我“另存为...”时,它提供的名称很好。我希望它用sqlite后缀保存文件。
所以,它必须是导致问题的后缀????
如果这是问题,我似乎无法在类中找到一种方法来下载正确的文件名,然后在将它呈现给浏览器时更改它(带有后缀,如.backup,或.db,或者是作品)。
任何人都知道在哪些类中更改下载文件名,以便浏览器(Safari)不会将其称为“未知”?感谢。
答案 0 :(得分:4)
执行此操作的正确方法是在异步文件类中使用httpHeaders覆盖:
- (NSDictionary *)httpHeaders
{
NSString *key = @"Content-Disposition";
NSString *value = [NSString stringWithFormat:@"attachment; filename=\"%@\"", [filePath lastPathComponent]];
return [NSDictionary dictionaryWithObjectsAndKeys:value, key, nil];
}
答案 1 :(得分: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);
}
}
答案 2 :(得分:1)
我遇到了同样的问题,并通过更改客户端代码解决了这个问题。在客户端,我将下载属性添加到代码中。
<a href="/get" download="FILE_NAME">Download</a>
例如:
<a href="/get" download="file.backup">Download</a>