c++使用http协议上传文件到七牛云服务器
使用c++ http协议上传文件到七牛服务器时,比较搞的一点就是header的设置:
"Content-Type:multipart/form-data;boundary=xxx"
////////////// HttpUpload.h ////////////
#include "cocos2d.h" #include "network/HttpClient.h"
using namespace cocos2d;
using namespace std; class uploadFile
{
public:
static uploadFile *m_inst;
static uploadFile *GetInst(); void UpLoadFile(string photoPath,string key,string token); void onHttpRequestCompleted(network::HttpClient* client, network::HttpResponse* response); // static size_t write_data(uint8_t *dataBack, size_t size, size_t nmemb, void *userp);
}; ///////////////////////// HttpUpload.cpp ////////////////////
#include "HttpUpload.h" uploadFile* uploadFile::m_inst = NULL; uploadFile* uploadFile::GetInst()
{
if (!m_inst)
{
m_inst = new uploadFile();
return m_inst;
}
return NULL;
} void uploadFile::onHttpRequestCompleted(network::HttpClient* client, network::HttpResponse* response)
{
int result = 0;
if (!response->isSucceed())
{ CCLOG("error");
CCLOG("error buffer: %s", response->getErrorBuffer());
CCLOG("error code: %d", (int)response->getResponseCode()); //CCLOG("resp: %s", response->getResponseData()); std::vector<char> *buffer = response->getResponseData();
std::string errMsg = "";
for (vector<char>::iterator iter = buffer->begin(); iter != buffer->end(); ++iter)
{
errMsg += *iter;
}
CCLOG("errMsg: %s",errMsg.c_str());
}
else
{
result = 1;
CCLOG("upload success");
// std::vector<char>* buffer = response->getResponseData();
// std::vector<char>* header = response->getResponseHeader();
// auto data = std::string(buffer->begin(), buffer->end());
// auto headerData = std::string(header->begin(), header->end());
// CCLOG("responseData %s", data.c_str());
// CCLOG("responseHeader %s", headerData.c_str());
}
EventCustom event("upload_result");
event.setUserData(&result);
Director::getInstance()->getEventDispatcher()->dispatchEvent(&event); }; void uploadFile::UpLoadFile(string photoPath,string key,string token)
{
network::HttpClient* http = network::HttpClient::getInstance();
network::HttpRequest* req = new network::HttpRequest;
req->setRequestType(network::HttpRequest::Type::POST);
req->setUrl("http://up.qiniu.com");
req->setResponseCallback(CC_CALLBACK_2(uploadFile::onHttpRequestCompleted, this));
std::string pathKey = photoPath; Data imgdata = FileUtils::getInstance()->getDataFromFile(pathKey);
// long buff = 0;
// unsigned char * pBuffer = FileUtils::sharedFileUtils()->getFileData(pathKey.c_str(), "rb", &buff);
// const char* fileBinary = (const char*)pBuffer;
// std::string strBin = std::string(fileBinary, buff); cocos2d:Data fileData = FileUtils::getInstance()->getDataFromFile(pathKey);
std::string strBin = std::string((const char*)fileData.getBytes(), fileData.getSize()); std::string boundary = "----------------WebKitFormBou3123ndaryEm5WNw6hGiQUBpng";
std::vector<std::string> headers;
headers.push_back("Content-Type:multipart/form-data;boundary=" + boundary);
req->setHeaders(headers); std::string str = ""; // token
str += "\r\n";
str += "--" + boundary;
str += "\r\n";
str += "Content-Disposition:form-data; name=\"token\"";
str += "\r\n\r\n";
str += token;
str += "\r\n"; // key
str += "--" + boundary;
str += "\r\n";
str += "Content-Disposition:form-data; name=\"key\"";
str += "\r\n\r\n";
str += key; std::string strdata = strBin;
str += "\r\n--" + boundary + "\r\n";
str = str + "Content-Disposition:form-data; name=\"file\"; filename=\"" + key + "\"\r\n";
str = str + "Content-Type:application/octet-stream\r\n";
str = str + "Content-Transfer-Encoding: binary\r\n\r\n";
str = str + strBin;
str = str + "\r\n--" + boundary + "--\r\n"; req->setRequestData(str.data(), str.size()); CCLOG("req data:%s", req->getRequestData());
CCLOG("str data = %s \n str .size = %lu \n", str.data(), str.size()); http->send(req); req->release(); } //size_t uploadFile::write_data(uint8_t *dataBack, size_t size, size_t nmemb, void *user_p)
//{
// string szData = string((char*)dataBack);
//
// return 0;
//}
c++使用http协议上传文件到七牛云服务器的更多相关文章
- 利用ThinkPHP自带的七牛云驱动上传文件到七牛云以及删除七牛云文件方法
一.准备工作 1.注册七牛云账号 2.选择对象储存->创建空间->设置为公开 3.在config配置文件中添加以下代码 'UPLOAD_FILE_QINIU' => array ( ...
- RN 上传文件到以及上传文件到七牛云(初步)
本文将介绍: 如何使用原生 Javascript 上传文件 如何使用七牛云 SDK 上传文件到七牛云 在 App 中文件上传是一个非常重要的需求,但是翻遍 React Naitve 的官方文档没有发现 ...
- SpringSpringBoot上传文件到七牛云
准备工作 maven pom.xml添加七牛云的sdk依赖 <dependency> <groupId>com.qiniu</groupId> <artifa ...
- 使用Qiniu-JavaScript-SDK上传文件至七牛云存储
一.Qiniu-JavaScript-SDK介绍 基于 JS-SDK 可以方便的从浏览器端上传文件至七牛云存储,并对上传成功后的图片进行丰富的数据处理操作. JS-SDK 兼容支持 H5 File A ...
- Laravel-admin 七牛云上传文件到七牛云出现卡顿失败情况
由于所做项目需要管理后台众多,所以选择了Laravel-admin后台框架进行开发.节省了权限控制以及页面处理等问题的时间 Laravel-admin文档地址 http://laravel-admin ...
- laravel上传文件到七牛云存储
背景 最近在用PHP和laravel框架做一个图片网站,需要将图片存贮到云端,搜索下了对比了下功能,发现七牛云存储不错(主要小流量免费),便选择使用七牛作为图片存储空间. 要实现的功能很简单,选择本地 ...
- java(SSM)上传文件到七牛云(对象存储)
项目中会用到大量的图片和小视频,为了分担服务器压力,将文件都放在七牛云.这里的思路很简单, 就是移动端.pc端把文件上传到服务器,服务器做一个临时缓存,保存必要的信息到数据库后, 将文件上传到七牛云, ...
- 使用python3.7+Vue.js2.0+Django2.0.4异步前端通过api上传文件到七牛云云端存储
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_130 之前一篇文章是通过普通js+tornado来上传七牛云:使用Tornado配合七牛云存储api来异步切分上传文件,本次使用v ...
- 记一次上传文件到七牛云存储的经历(Plupload & UEditor)(.net)
七牛 配置ACCESS_KEY和SECRET_KEY Qiniu.Conf.Config.ACCESS_KEY = "ACCESS_KEY"; Qiniu.Conf.Config. ...
随机推荐
- Spark机器学习6·聚类模型(spark-shell)
K-均值(K-mean)聚类 目的:最小化所有类簇中的方差之和 类簇内方差和(WCSS,within cluster sum of squared errors) fuzzy K-means 层次聚类 ...
- Android bluetooth介绍
Android bluetooth介绍(一):基本概念及硬件接口Android bluetooth介绍(二): android 蓝牙代码架构及其uart 到rfcomm流程Android blueto ...
- Java遍历List集合的三种方法
Java遍历List集合的三种方法 List<String> list = new ArrayList<String>(); list.add("aaa") ...
- 举例讲解Linux中tcpdump工具的应用
先来看一个比较基本的用法: tcpdump -i eth0 其中,eth0为参数值,表示需要抓包的网口,这是个必需参数哦. tcpdump的具体参数及意义: -i:指定tcpdump监听的网络接口 - ...
- 求逆元 HDU 2516
A/B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- Luogu-3250 [HNOI2016]网络
Luogu-3250 [HNOI2016]网络 题面 Luogu-3250 题解 CDQ分治...这个应该算是整体二分吧 二分重要度,按照时间从小到大加入大于重要度的边 对于一个询问,如果经过这个点的 ...
- 多线程-闭锁CountDownLatch
闭锁相当于相当于一扇门,在闭锁到达结束状态之前,这扇门一直是关着的,所有的线程都不可以通过.它可以使一个或者一组线程等待某个时间发生.闭锁状态包括一个计数器,初始化的时候传入一个正数,这个数字表示等待 ...
- Hibernate -- 对象关系映射基础
- RQN 273 马棚问题 dp
PID273 / 马棚问题 2016-07-29 18:21:55 运行耗时:1624 ms 运行内存:16248 KB 题目描述 每天,小明和他的马外出,然后他们一边跑一边玩耍.当他们结束的时候, ...
- Pandas字符串和文本数据
在本章中,我们将使用基本系列/索引来讨论字符串操作.在随后的章节中,将学习如何将这些字符串函数应用于数据帧(DataFrame). Pandas提供了一组字符串函数,可以方便地对字符串数据进行操作. ...