1

組み込みの HTTP サーバーを含むアプリを作成しています。ソケット経由で PNG 画像を送信する必要がありますが、どういうわけか混乱して画像が表示されません。これは私のコードです (私は AsyncSockets を使用しています):

if(processingURL == FALSE) {

        NSString *filePath = [[NSString alloc] initWithFormat:@"%@/Contents/Resources/public%@",[self getApplicationPath], [request objectAtIndex:1]];
        //NSLog(@"%@", filePath);


        if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
            contententType = @"image/png";
            responseCode = @"200 OK";
         //   responseBody = [[NSString alloc] initWithData:[[NSFileManager defaultManager] contentsAtPath:filePath] encoding:NSASCIIStringEncoding];

            NSData * content = [[NSData alloc] initWithContentsOfFile:filePath];

            responseBody = [[NSString alloc] initWithData:content encoding:NSASCIIStringEncoding];

            NSLog(@"%@",responseBody);

        }
    }

    data = [[NSString stringWithFormat:@"HTTP/1.1 %@\nContent-Type: %@\n\n\n %@", responseCode, contententType, responseBody] dataUsingEncoding:NSUTF8StringEncoding];


    [sock writeData:data withTimeout:-1 tag:0];

私が間違っていることは何ですか?問題は応答の形式が正しくないことだと思いますが、わかりません、ありがとう:)

4

1 に答える 1

1
responseBody = [[NSString alloc] initWithData:content encoding:NSASCIIStringEncoding];

任意のファイル コンテンツ データをテキストとして扱わないでください。そうではありません。

PNG は ASCII テキスト ファイルではありません。そのように扱う必要があるバイナリ データが含まれています。つまり、NSData を最後まで使用し、決して NSString のテキストに変換したり解釈したりしようとしないことを意味します。

作成する必要がある唯一の文字列は、応答コードとヘッダー用です。その文字列からデータを生成し、ファイルのデータを連結してサーバーに送信します。

于 2011-11-13T00:15:51.393 に答える