c++ cgi file streaming

c++ cgi file streaming

本文关键字:streaming file cgi c++      更新时间:2023-10-16

我一直在尝试通过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;
}

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

您正在以十六进制(ASCII 0 和 4 以及 C 等序列(对 .mp3 文件进行编码。 您需要 fwrite() ,这将保留您正在写入的字节的原始格式。 另外:4 字节的缓冲区大小可以工作,但我建议改用 4k (4048( 或 8k (8192( 字节。 在现代机器上,这并不重要,但是对fread()的调用(相对(慢,因此您希望尽可能少地调用。

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