1

我一直在尝试通过 cgi 提供二进制文件(例如 mp3 文件)。关键是我想让文件只能通过特殊脚本访问,而不是通过网络服务器本身。直到现在我得到:

int main() {
    cgiWriteEnvironment("/CHANGE/THIS/PATH/capcgi.dat");
    cgiHeaderContentType("audio/mpeg");

    FILE *fp;
    fp=fopen("D:/something.mp3", "r");
    char buffer[4];

    while (!feof(fp)) {
        fread(buffer, 4, 1, fp);
        printf("%x",buffer);
    }


    return 0;
}

它正在向标准输出输出一些东西,浏览器正在尝试打开 vlc(所以标题应该是正确的......)但玩家无法处理数据:-(

4

1 回答 1

1

您正在.mp3以十六进制、ASCII 0 和 4 以及 C 等序列对文件进行编码。您想要fwrite(),这将保留您正在编写的字节的原始格式。另外:4 字节的缓冲区大小将起作用,但我建议改为 4k (4048) 或 8k (8192) 字节。在现代机器上没关系,但调用fread()(相对)慢,所以你想尽可能少。

另外:这是一件很奇怪的事情。您要解决什么问题,为什么普通的 Web 服务器无法解决?

于 2012-05-22T14:58:47.167 回答