更改下载Cocoahttpserver中的文件名
问题描述:
我在iPhone应用程序中使用cocoahttpserver,但是当我尝试下载它时(通过单击标准演示应用程序中的链接),我的sqlite文件(myDatabase.sqlite)到达我的Mac桌面为“未知”,根本没有后缀。但是,当我“另存为...”时,它提供了正确的名称。我更喜欢用sqlite后缀来保存文件。更改下载Cocoahttpserver中的文件名
那么,它一定是造成问题的后缀?
如果这是问题,我似乎无法在类中找到下载正确文件名的方法,但在将其呈现给浏览器时(使用.backup或.db之类的后缀或其它这样可行)。
任何人都知道在哪里更改下载文件名,以便浏览器(Safari)不会称它为“未知”?谢谢。
答
我发现了别人的代码(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);
}
}
答
正确的方式做,这是使用httpHeaders在异步文件类重写:
- (NSDictionary *)httpHeaders
{
NSString *key = @"Content-Disposition";
NSString *value = [NSString stringWithFormat:@"attachment; filename=\"%@\"", [filePath lastPathComponent]];
return [NSDictionary dictionaryWithObjectsAndKeys:value, key, nil];
}
答
我有同样的问题,并通过改变客户端代码解决了这个问题。在客户端,我添加下载属性到标签。
<a href="/get" download="FILE_NAME">Download</a>
例如:
<a href="/get" download="file.backup">Download</a>