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

时间:2015-02-25 15:54:23

标签: c image http webserver fread

我可以使用我的web server.c在浏览器中显示html和纯文本文件。但是,当我尝试加载图像jpeg文件时,它会给我这个错误"图像http://127.0.0.1:8080/index.jpeg"无法显示,因为它包含错误。

我将内容类型设置为" 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));

这是我设置的图片的标题

" HTTP / 1.1 200 OK \ r \ n"               "内容类型:image / jpeg \ r \ n"               "连接:关闭\ r \ n"               " \ r \ n&#34 ;;

请劝告。谢谢:))

1 个答案:

答案 0 :(得分:2)

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

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

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

  2. 您应该检查fopen()等返回的值。

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