如何使用 fread 在 C 中使用 Web 服务器在浏览器中显示图像?

How do I display an image in browser using a web server in C using fread?

我可以使用我的网站 server.c 在浏览器中显示 html 和纯文本文件。但是,当我尝试加载图像 jpeg 文件时,出现此错误 "The image http://127.0.0.1:8080/index.jpeg" cannot be displayed because it contains error.

content-type我设置为"image/jpeg"。

这是我的代码:

    FILE *fp;
    char ch;
    unsigned long fileLen;
    unsigned char *buffer;

    fp = fopen(page+1,"rb");
    fseek(fp, 0, SEEK_END);
    fileLen=ftell(fp);
    fseek(fp, 0, SEEK_SET);
    buffer=(char *)malloc(fileLen);
    fread(buffer,fileLen,sizeof(unsigned char),fp);

    fclose(fp);

    write (connection_fd, buffer, strlen(buffer));

这是我为我的图像设置的header

"HTTP/1.1 200 OK\r\n" "Content-type: image/jpeg\r\n" "Connection: close\r\n" “\r\n”;

请指教。谢谢:)

您的 write() 陈述是错误的。 strlen(buffer) 返回的值将是 JPEG 文件中第一个零字节的位置。请尝试使用 fileLen

以下是我想到的其他一些事情:

  1. fread() 调用中,第二个和第三个参数实际上应该反过来。由于 sizeof(unsigned char) 根据定义是 1,我会使用 fread(buffer,1,fileLen,fp); 代替。

  2. 你真的应该检查 fopen() 等返回的值

  3. 您对 page+1 的使用表明您将未经检查的 HTTP 查询字符串参数直接放入文件系统调用中。显然你不想那样做:-)