如何使用 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
。
以下是我想到的其他一些事情:
在 fread()
调用中,第二个和第三个参数实际上应该反过来。由于 sizeof(unsigned char)
根据定义是 1
,我会使用 fread(buffer,1,fileLen,fp);
代替。
你真的应该检查 fopen()
等返回的值
您对 page+1
的使用表明您将未经检查的 HTTP 查询字符串参数直接放入文件系统调用中。显然你不想那样做:-)
我可以使用我的网站 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
。
以下是我想到的其他一些事情:
在
fread()
调用中,第二个和第三个参数实际上应该反过来。由于sizeof(unsigned char)
根据定义是1
,我会使用fread(buffer,1,fileLen,fp);
代替。你真的应该检查
fopen()
等返回的值您对
page+1
的使用表明您将未经检查的 HTTP 查询字符串参数直接放入文件系统调用中。显然你不想那样做:-)