使用lincurl下载的图片为什么打不开

jiang江江 2014-07-30 10:10:59
#include <stdio.h>
#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;
}

自己写了一个下载图片数据不经过本地存储直接加载到数据库中的小程序,但是为什么加载到数据库中的文件打不开呢?
...全文
235 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiang江江 2014-08-04
  • 打赏
  • 举报
回复
找到答案了,write_data中的读入流写成stream。再换个函数就可以了
jiang江江 2014-07-31
  • 打赏
  • 举报
回复
这只是个测试图片有没有加载的,程序里是没有这个的,不过我以后会注意了
sniffer12345 2014-07-30
  • 打赏
  • 举报
回复
//拷贝该字段 sprintf(buffer2, "%s", test); 这样写肯定会被你的主程骂的。。二进制和文本得区分好啊骚年
内容概要:本文详细介绍了利用Matlab代码实现分数阶系统(FOS)Lyapunov指数谱的计算方法,涵盖分数阶Lorenz系统、4D分数阶Chen系统和分数阶Duffing振荡器三类典型非线性动力学系统。通过数值仿真手段,系统地分析了不同分数阶微分阶次下系统的混沌演化行为与稳定性特征,重点阐述了Lyapunov指数谱的求解算法流程、关键实现步骤及参数设置策略,为深入研究分数阶系统的复杂动力学特性提供了可靠的数值分析工具与技术路径。; 适合人群:具备非线性动力学、分数阶微积分理论基础及Matlab编程能力的研究生、高校教师、科研机构研究人员以及从事混沌系统建模、复杂系统控制与信息安全等领域的工程技术人员。; 使用场景及目标:①开展分数阶微分方程系统的混沌特性分析与稳定性判据研究;②通过Lyapunov指数谱揭示系统在参数变化和阶次调节下的动力学演化规律;③为分数阶混沌系统的同步控制、保密通信、信号加密等实际应用提供理论支撑与算法基础。; 阅读建议:建议读者结合Matlab代码实现与相关数学理论同步学习,重点关注数值算法的实现细节、初值敏感性与积分步长对结果的影响,鼓励通过修改系统模型、调整分数阶阶次或引入外部激励等方式进行拓展性实验,以深化对分数阶系统非线性行为的理解。
内容概要:本文系统研究了基于三电平NPC换流器的双端VSC-HVDC背靠背系统的功率解耦控制策略与暂态恢复特性,并借助Simulink平台完成了完整的系统建模与仿真验证。研究深入剖析了系统的主电路拓扑结构、PWM调制机制以及有功功率与无功功率独立调控的理论基础,重点构建了包含内外环协同控制的控制系统架构,实现了对直流电压、交流电流等关键变量的精确动态调节。文章详细阐述了在外部扰动或故障条件下系统的暂态响应过程,评估了其故障穿越能力与恢复性能,通过仿真实验验证了所采用控制策略在提升系统动态响应速度、维持功率解耦能力和增强运行稳定性方面的有效性。; 适合人群:具备电力电子、高压直流输电或新能源并网等相关领域基础知识的研究生、科研人员及从事电力系统仿真与控制算法开发的工程技术人员。; 使用场景及目标:①用于高等院校或科研机构开展VSC-HVDC系统建模与先进控制策略的教学与科研工作;②为工程实践中高压直流输电系统的控制算法设计、参数整定与仿真验证提供可靠的技术参考;③支撑对三电平换流器拓扑优势及其在背靠背系统中应用潜力的深入理解与优化设计。; 阅读建议:建议结合提供的Simulink仿真模型同步研读,重点关注控制系统设计逻辑、内外环参数设计方法与仿真结果分析部分,宜在掌握基本电力电子变换器原理和矢量控制理论的基础上,进一步深化对多电平换流器控制特性与系统级动态行为的理解。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧