从服务器下载图像(cUrl,但需要建议)C++
Download an Image from Server (cUrl, however taking suggestions) C++
我正在尝试通过从服务器(网站)下载图像来设置旋转背景图像,并尝试使用 curl 执行此操作,但这样做的成功率为 0。我的代码的(缩短)版本如下。我没有收到错误,但是,我将如何"暂时"保存此图像以将其显示为背景?有图像(-类型变量)或其他东西吗?
这只是一种学习体验,因此任何库或建议将不胜感激。
#include <curl/curl.h>
CURL *curlCtx = curl_easy_init();
curl_easy_setopt(curlCtx, CURLOPT_URL, "http://www.examplesite.com/testimage.jpeg");
curl_easy_setopt(curlCtx, CURLOPT_WRITEDATA, this);
curl_easy_setopt(curlCtx, CURLOPT_WRITEFUNCTION, callbackfunction);
const CURLcode rc = curl_easy_perform(curlCtx);
if(rc == CURLE_OK){
//it worked
}
size_t callbackfunction(char *data, size_t size, size_t nmemb, void *stream){
//do something here with image...?
}
谢谢詹姆斯
编辑:对不起,我错误地将()添加到回调函数中。
你的代码甚至不可编译!哗啦!
应实现callbackfunction()
来处理传入的数据流。在这种情况下,我想您希望将数据写入文件,对吗?
检查调用的返回总是很好的做法,所以拿我分享的源代码并仔细研究它。下面的程序完成了您尝试执行的操作。
DW.cpp:
#include <stdio.h>
#include <curl/curl.h>
size_t callbackfunction(void *ptr, size_t size, size_t nmemb, void* userdata)
{
FILE* stream = (FILE*)userdata;
if (!stream)
{
printf("!!! No streamn");
return 0;
}
size_t written = fwrite((FILE*)ptr, size, nmemb, stream);
return written;
}
bool download_jpeg(char* url)
{
FILE* fp = fopen("out.jpg", "wb");
if (!fp)
{
printf("!!! Failed to create file on the diskn");
return false;
}
CURL* curlCtx = curl_easy_init();
curl_easy_setopt(curlCtx, CURLOPT_URL, url);
curl_easy_setopt(curlCtx, CURLOPT_WRITEDATA, fp);
curl_easy_setopt(curlCtx, CURLOPT_WRITEFUNCTION, callbackfunction);
curl_easy_setopt(curlCtx, CURLOPT_FOLLOWLOCATION, 1);
CURLcode rc = curl_easy_perform(curlCtx);
if (rc)
{
printf("!!! Failed to download: %sn", url);
return false;
}
long res_code = 0;
curl_easy_getinfo(curlCtx, CURLINFO_RESPONSE_CODE, &res_code);
if (!((res_code == 200 || res_code == 201) && rc != CURLE_ABORTED_BY_CALLBACK))
{
printf("!!! Response code: %dn", res_code);
return false;
}
curl_easy_cleanup(curlCtx);
fclose(fp);
return true;
}
int main(int argc, char** argv)
{
if (argc < 2)
{
printf("Usage: %s <url>n", argv[0]);
return -1;
}
if (!download_jpeg(argv[1]))
{
printf("!! Failed to download file: %sn", argv[1]);
return -1;
}
return 0;
}
编译方式: g++ dw.cpp -o dw -lcurl
并测试:
./dw http://unicornify.appspot.com/avatar/51d623f33f8b83095db84ff35e15dbe8?s=128
此应用程序在磁盘中创建一个名为 out.jpg
的文件,其中包含它下载的数据。
相关文章:
- 下载URL中的所有文件
- VisualStudio:使用 Suse Enterprise Server 12 SP5 时,不会下载远程库标头
- 从 C++ 上的网址下载文件
- libcurl :显示正在运行的上传和下载速率
- 在 NVIDIA GEFORCE GTX 1050 上下载适用于 Windows 10 的 openCL 1.2
- 使用 libssh 从 SFTP 服务器下载文件并使用 C++ 将其写入 ofstream?
- 佳能SDK无法从相机下载图片
- 使用 Libcurl 库进行文件下载
- Mac os x app bundle 在下载并运行时崩溃,但在终端或更改 Info.plist 时运行良好
- 通过boost asio iostream下载大文件的最快方法是什么?
- 下载 GPU Mats 的矢量到主机
- 有没有办法使用 mongocxx 驱动程序从 GridFS 集合的文件下载任意范围?
- 为什么URLDownloadToFile()没有下载我的文件
- 下载到当前目录
- 顺序中止后未触发 Qt 下载进度
- 使用 Qt 下载公共保管箱文件
- WinInet只下载网页的一部分
- 视觉 无法使用 libcurl c++ 下载文件
- 下载文件到漫游问题
- 在 C++14 中的 for 循环中并行网络下载