Libcurl使用URL下载图片

时间:2015-04-27 15:40:45

标签: url path libcurl

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

<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时,第一张图片已完成,有时下一张图片已损坏。

1 个答案:

答案 0 :(得分:0)

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循环中打开文件,但只在最后关闭它。你最终会得到一堆未正确关闭的文件。在您致电fclose的同一范围内致电fopen

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方法的内容。