将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
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。