2

iphoneアプリでcocoahttpserverを使用していますが、(標準のデモアプリのリンクをクリックして)ダウンロードしようとすると、sqliteファイル(myDatabase.sqlite)がMacデスクトップに「不明」としてサフィックスなしで届きます。すべて。ただし、「名前を付けて保存...」とすると、名前が正しく表示されます。sqliteサフィックスを付けてファイルを保存することをお勧めします。

だから、それは問題を引き起こしている接尾辞でなければなりませんか????

これが問題である場合、クラスで正しいファイル名をダウンロードする方法を見つけることができないようですが、ブラウザに表示するときに変更します(.backup、.dbなどのサフィックスを付けて)。

ブラウザ(Safari)がダウンロードファイル名を「不明」と呼ばないように、クラスのどこでダウンロードファイル名を変更するかを知っている人はいますか?ありがとう。

4

3 に答える 3

4

これを行う適切な方法は、非同期ファイルクラスでhttpHeadersオーバーライドを使用することです。

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

    return [NSDictionary dictionaryWithObjectsAndKeys:value, key, nil];
}
于 2010-01-26T04:04:34.327 に答える
1

他の誰かのコード(MyAppSales)を見つけ、replyToHTTPRequestで、以下のようにContent-Dispositionヘッダーを追加しました(メソッドの1つのセクションに)。これで機能します。

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);
            }

        }
于 2009-11-23T00:13:06.680 に答える
1

同じ問題が発生し、クライアント側のコードを変更することで解決しました。クライアント側では、ダウンロード属性をタグに追加します。

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

例えば:

<a href="/get" download="file.backup">Download</a> 
于 2015-02-01T17:52:59.080 に答える