http下载文件

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);

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值