我可以使用我的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 ;;
请劝告。谢谢:))
答案 0 :(得分:2)
您的write()
声明错误。 strlen(buffer)
返回的值将是JPEG文件中第一个零字节的位置。请尝试使用fileLen
。
以下是我想到的其他一些事情:
在fread()
调用中,第二个和第三个参数应该是反过来的。根据定义,sizeof(unsigned char)
为1
,我会使用fread(buffer,1,fileLen,fp);
代替。
您应该检查fopen()
等返回的值。
您对page+1
的使用表明您将未经检查的HTTP查询字符串参数直接放入文件系统调用中。显然你不想这样做: - )