mysql里面存jpg是什么格式的_将JPG图片以二进制文件的形式存入MYSQL中,取出来打开的时候提示不能识别图片格式...

本文描述了在MySQL中以二进制形式存储和读取JPG图片时遇到的问题,即从数据库中取出图片后无法正常识别其格式。作者展示了用于读取和保存图片到MySQL数据库的C代码,并在评论中提到了代码中可能存在的错误,如未正确使用`sqlrow`。
摘要由CSDN通过智能技术生成

将JPG图片以二进制文件的形式存入MYSQL中,取出来打开的时候提示不能识别图片格式

(2012-06-07 01:46:48)

标签:

图片

二进制

杂谈

将JPG图片以二进制文件的形式存入MYSQL中,取出来打开的时候提示不能识别图片格式static int

get_file_size(char *path, off_t *size)

{

struct stat file_stats;

if(stat(path, &file_stats))

{

return -1;

}

*size = file_stats.st_size;

return 0;

}

int save_picture(MYSQL*conn)

{

size_t fd;

off_tsize;

int n = 0;

char *sql;

char *buf;

char *end;

if (get_file_size(FILENAME, &size))

{

perror("get file size" );

exit(1);

}

if (!(buf = (char *)malloc(sizeof(char) * (size + 1)))) {

perror("malloc buf" );

exit(1);

}

if ((fd = open(FILENAME, O_RDONLY)) < 0) {

perror("open file:");

exit(1);

}

if ((n = read(fd, buf, size)) < 0) {

perror("fread file" );

exit(1);

}

sql = (char *)malloc(sizeof(char) * n * 2 + 256);

if (!sql) {

perror("malloc sql" );

exit(1);

}

sprintf(sql, "insert into pictureinfo(files)

values(");

end = sql;

end += strlen(sql); and so on

*end++ = '\'';

end += mysql_real_escape_string(conn, end, buf, n);

*end++ = '\'';

*end++ = ')';

if (mysql_query(conn, sql))

{

fprintf(stderr, "insert failed,

%s\n", mysql_error(conn));

exit(1);

}

if(close(fd))

{

perror("file close:");

exit(1);

}

free(sql);

sql = NULL;

return 0;

}

int pict_picture(MYSQL*conn)

{

MYSQL_RES * result;

MYSQL_ROW sqlrow;

size_t fd_w;

int i;

unsigned long *length;

fd_w = open("./ca.jpg", O_WRONLY

| O_CREAT | O_TRUNC, 777);

if(fd_w < 0)

{

perror("file open:");

exit(1);

}

if(mysql_query(conn, "SELECT files FROM

pictureinfo where id = 2"))

{

fprintf(stderr, "SQL

ERROR(%d):%s\n", mysql_errno(conn),

mysql_error(conn));

exit(1);

}

result = mysql_store_result(conn);

if(http://www.hungtei.com!(mysql_num_rows(result)))

{

fprintf(stderr,"no find

info!\n");

}

while(sqlrow = mysql_fetch_row(result))

{

for (i = 0; i < mysql_num_fields(result); i++)

{

length = mysql_fetch_lengths(result);

write(fd_w, sqlrow[0], length[0]);

}

}

if(close(fd_w))

{

perror("file close:");

exit(1);

}

mysql_free_result(result);

return 0;

}

已解决

[ 本帖最后由 奥丁@ 于 2008-6-23 19:42 编辑

]嗯,一定要藏着掖着,千万别把代码贴出来,不然我们一不小心把你http://www.haotao8.net的问题给解决了就不好玩了。

赶紧藏好了!:mrgreen:原帖由 flw 于 2008-6-23 14:26 发表

http://bbs.chinaunix.net/images/common/back.gif

嗯,一定要藏着掖着,千万别把代码贴出来,不然我们一不小心把你的问题给解决了就不好玩了。

赶紧藏好了!

服了 那几行代码有什么可藏的 代码刚在LINUX下 不方便 现在拷出来了 贴上收回刚才的话.

楼主, 你自己好好看手册再说. sqlrow 没赋值就使用, 这种错误也有. 摘一个手册中的例子:

MYSQL_ROW row;

unsigned int num_fields;

unsigned int i;

num_fields = mysql_num_fields(result);

while ((row = mysql_fetch_row(result)))

{

unsigned long *lengths;

lengths = mysql_fetch_lengths(result);

for(i = 0; i < num_fields; i++)

{

printf("[%.*s] ", (int)

lengths,

row ? row : "NULL");

}

printf("\n");

}

[ 本帖最后由 ideawu

分享:

a4c26d1e5885305701be709a3d33442f.png喜欢

0

a4c26d1e5885305701be709a3d33442f.png赠金笔

加载中,请稍候......

评论加载中,请稍候...

发评论

登录名: 密码: 找回密码 注册记住登录状态

昵   称:

评论并转载此博文

a4c26d1e5885305701be709a3d33442f.png

发评论

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值