【问题标题】:Libcurl Download Picture with URLLibcurl 下载带有 URL 的图片
【发布时间】:2015-04-27 15:40:45
【问题描述】:

我正在尝试从我的网络服务器下载图片并将它们保存在一个文件夹中。

<CURL *curl;
FILE *fp;
CURLcode res;
char outfilename[FILENAME_MAX];
std::string soutfilename = "C:\\Users\\MDrazyk\\counTechTemp\\";
string lawl= getURL(einstellung[8][0]);
const char *url = lawl.c_str();
curl = curl_easy_init();

for(int g = 0; g < std::stoi(einstellung[0][7]); ++g){
    string str = einstellung[8][0];
    soutfilename =soutfilename +str;
    strcpy(outfilename,soutfilename.c_str());
if (curl) {
    fp = fopen(outfilename,"wb");
    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);
    res = curl_easy_perform(curl);

}
}
 curl_easy_cleanup(curl);
    fclose(fp); 

和getURL:

std::string getURL(std::string a) {
 std::string url = "http://192.168.240.1/files/";
 url = url + a;
retur url;

}

einstellung[8][0] = 图片名称

当我启动程序时,它会将图片保存在它们为空的文件夹中。 当我手动添加 URL 时,第一张图片就完成了,有时下一张就坏了。

【问题讨论】:

  • 关键可能在于 HTTP 服务器的响应。打开 CURLOPT_VERBOSE 并调查细节!

标签: url path libcurl


【解决方案1】:
std::string soutfilename = "C:\\Users\\MDrazyk\\counTechTemp\\";

for(int g = 0; g < std::stoi(einstellung[0][7]); ++g){
    soutfilename = soutfilename + str;
}

您一遍又一遍地附加到soutfilename。您最终会得到类似“C:\Users\MDrazyk\counTechTemp\fileone.jpgfiletwo.jpgfilethree.jpg”的路径


for(int g = 0; g < std::stoi(einstellung[0][7]); ++g){
    if (curl) {
        fp = fopen(outfilename,"wb");
    }
}

fclose(fp); 

您在 for 循环中打开文件,但仅在最后关闭它。您最终会得到一堆未正确关闭的文件。在调用 fopen 的同一范围内调用 fclose


curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp);

如果您的意图是写入FILE*,则无需设置CURLOPT_WRITEFUNCTIONCURLOPT_WRITEFUNCTION 的默认值为fwrite,因此只需将CURLOPT_WRITEDATA 设置为FILE* 就足够了。

如果这不能解决您的问题,您需要向我们展示您的 write_data 方法的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-21
    • 2017-12-23
    • 2016-03-30
    • 2015-09-15
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多