使用lincurl下载的图片为什么打不开
#include <curl/curl.h>
#include<string>
#include<sqlite3.h>
#include<iostream>
#include<fstream>
#include<vector>
#include<Windows.h>
using namespace std;
//写入函数
static size_t get_count();
size_t write_data(void *ptr, size_t size, size_t count,char *stream)
{
memcpy(stream,ptr,get_count()/sizeof(char));
//printf("%s",ptr);
return count;}
//获取应下载文件大小
size_t save_data(void *ptr, size_t size , size_t count,char *stream)
{
return count*size;
}
static size_t get_count(){
CURL *curl;
CURLcode res;
res=curl_global_init(CURL_GLOBAL_WIN32);
double filesize=0;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if (curl) {
res=curl_easy_setopt(curl, CURLOPT_URL, "http://cdn.duitang.com/uploads/item/201111/09/20111109230753_kaeuy.thumb.600_0.jpg");
res=curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
/* res=curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);*/
res=curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, save_data);
res=curl_easy_setopt(curl, CURLOPT_HEADER, 0L);
//curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
res=curl_easy_perform(curl);
if (res == CURLE_OK) {
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &filesize);
} else {
filesize = -1;
}
return filesize;
}
}
int main()
{
//初始化
CURLcode res;
res = curl_global_init(CURL_GLOBAL_WIN32);
CURL *curl_handle;
curl_handle = curl_easy_init();
char *zErrMsg = 0;
size_t fsize=0;
fsize = get_count();
char*fp = new char[fsize/sizeof(char)+1];
if(res!=CURLE_OK)
{
std::cerr<<"initialize libcurl failed";
return-1;
}
if(curl_handle!=NULL)
{
res = curl_easy_setopt(curl_handle, CURLOPT_URL, "http://cdn.duitang.com/uploads/item/201111/09/20111109230753_kaeuy.thumb.600_0.jpg" );
res = curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data);
res = curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, fp);
res = curl_easy_perform(curl_handle);
//读入数据库
sqlite3 *db;
sqlite3_stmt *stat;
int value= sqlite3_open("f:/ceshi/gtestpic.db", &db);
sqlite3_exec(db, "CREATE TABLE list (fliename varchar(128) UNIQUE, fzip blob);", 0, 0, &zErrMsg);
sqlite3_prepare(db, "insert into list values ('download',?);", -1, &stat, 0);
sqlite3_bind_blob(stat,1,fp,fsize/sizeof(char), NULL);
sqlite3_step(stat);
//选取该条数据
char buffer2[111111]="0";
sqlite3_prepare(db, "select*from list;", -1, &stat, 0);
sqlite3_step(stat);
//得到记录中的BLOB字段
const void * test = sqlite3_column_blob(stat, 1);
//得到字段中数据的长度
int size = sqlite3_column_bytes(stat, 1);
//拷贝该字段
sprintf(buffer2, "%s", test);
FILE *fp2;
fp2 = fopen("f:/ceshi/outfile.jpg", "wb");
if(fp2 != NULL)
{
size_t ret = fwrite(test, sizeof(char), size, fp2);
fclose(fp2);
}
//释放资源
delete[]fp;
sqlite3_finalize(stat);
sqlite3_close(db);
}
//释放资源
curl_easy_cleanup(curl_handle);
curl_global_cleanup();
return 0;
}
自己写了一个下载图片数据不经过本地存储直接加载到数据库中的小程序,但是为什么加载到数据库中的文件打不开呢?
相关推荐
curl-7.73.0.tar.gz
最新版本curl源码,curl-7.73.0.tar.gz 。可以交叉编译移植到嵌入式LinU型平台。具体编译移植方法可以参考博客。
通信行业基于MongoDB的安全合规与性能优化:5G时序数据处理、可查询加密及窗口函数应用
内容概要:本文围绕MongoDB在通信行业的深度应用,系统讲解了可查询加密、时间序列集合、窗口函数与性能诊断四大核心技术。通过详实的代码案例,展示了如何利用可查询加密实现敏感数据合规存储与查询,使用时序集合高效处理5G网络KPI等高频写入场景,借助窗口函数进行经营指标的趋势分析,并结合explain()与查询分析器完成性能调优。文章还涵盖分片一致性检查、索引优化等运维实践,全面覆盖通信系统对安全、性能与扩展性的严苛要求。; 适合人群:具备一定数据库基础,从事通信行业研发、架构或运维工作1-3年的技术人员,尤其是参与5G网络监控、客户数据管理或大数据平台建设的相关人员。; 使用场景及目标:① 实现用户手机号、身份证等敏感信息的加密存储与等值查询,满足安全合规要求;② 构建高吞吐、低延迟的5G基站KPI时序数据存储与分析系统;③ 在数据库层直接完成滑动平均、累计求和等经营分析,减少应用层计算负担;④ 诊断慢查询、验证索引有效性,保障系统高性能运行。; 阅读建议:此资源强调理论与实战结合,建议读者在本地或测试环境部署MongoDB 7.0+版本,动手复现文中代码,重点关注schemaMap配置、时序集合参数选择与窗口函数语法细节,并结合explain执行计划理解底层优化机制,从而真正掌握通信级数据架构的设计精髓。
国央企创新负责人如何借助平台实现技术成果的高价值转化与资源精准配置?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。
产业园区运营负责人如何在平台建设中科学配置创新资源,提升园区内技术对接效率?.docx
产业园区运营负责人如何在平台建设中科学配置创新资源,提升园区内技术对接效率?
产业园区运营负责人如何提升园区内技术供需匹配的精准度?.docx
科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。


其它技术问题
