http下载文件

来源:互联网 发布:淘宝买手机靓号靠谱吗 编辑:程序博客网 时间:2024/06/11 03:58
void ResDownManager::sendRequest(std::string url)
{
HttpRequest* request = new HttpRequest();//创建request对象,这里new出来的对象不能使用autorelease(),原因后述
request->setUrl(url);//设置url
request->setRequestType(HttpRequest::Type::GET);//设置请求方式
request->setResponseCallback(CC_CALLBACK_2(ResDownManager::onHttpRequestCompleted, this));//这是回调对象和回调函数
request->setTag("GET test1");//设置用户标识,可以通过response获取
HttpClient::getInstance()->send(request);//使用CCHttpClient共享实例来发送request
request->release();//调用release()
}


//这里就是我们要处理接收到数据的回调函数了,sender为CCHttpClient实例指针,data为接收到的response指针
void ResDownManager::onHttpRequestCompleted(HttpClient *sender, HttpResponse *response)
{
if (!response)
{
this->SetLoadState(StageLoadState::SLS_COMPLETE);
return;
}


// 获取对应request的字符串标识
if (0 != strlen(response->getHttpRequest()->getTag()))
{
CCLOG("%s completed", response->getHttpRequest()->getTag());
}
//获取返回代码,比如200、404等
int statusCode = response->getResponseCode();

CCLOG("response code: %d", statusCode);


if (!response->isSucceed())
{
CCLOG("response failed");
CCLOG("error buffer: %s", response->getErrorBuffer());//可以调用getErrorBuffer()来获取错误原因
this->SetLoadState(StageLoadState::SLS_COMPLETE);
return;
}


// dump data
std::vector<char> *buffer = response->getResponseData();//用来获取接收到的数据
if (buffer->size() == 0)
{
//没有更新
this->SetLoadState(StageLoadState::SLS_COMPLETE);
return;
}
std::string result = std::string(buffer->begin(), buffer->end());;
//for (std::vector<char>::iterator iter = buffer->begin(); iter != buffer->end(); ++iter)
//{
// result += *iter;
//}


//获取不同平台的可写目录 + "设定的文件名"
string wirtePath = FileUtils::getInstance()->getWritablePath() + "asdf.json";
//通过File类的一系列函数进行对内存中的数据写入到本地存储设备
FILE* openFile = fopen(wirtePath.c_str(), "wb+");//打开文件 有即使用 无即创建
//1.写入的内容  2.写入内容的单字节数 3.写入的内容的大小 4.写到哪个文件去
fwrite(result.c_str(), 1, result.size(), openFile);//对打开文件进行写入数据
//写入完成之后关闭进程(文件)
fclose(openFile);

}
原创粉丝点击