使用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协议上传文件到七牛云服务器的更多相关文章

  1. 利用ThinkPHP自带的七牛云驱动上传文件到七牛云以及删除七牛云文件方法

    一.准备工作 1.注册七牛云账号 2.选择对象储存->创建空间->设置为公开 3.在config配置文件中添加以下代码 'UPLOAD_FILE_QINIU' => array ( ...

  2. RN 上传文件到以及上传文件到七牛云(初步)

    本文将介绍: 如何使用原生 Javascript 上传文件 如何使用七牛云 SDK 上传文件到七牛云 在 App 中文件上传是一个非常重要的需求,但是翻遍 React Naitve 的官方文档没有发现 ...

  3. SpringSpringBoot上传文件到七牛云

    准备工作 maven pom.xml添加七牛云的sdk依赖 <dependency> <groupId>com.qiniu</groupId> <artifa ...

  4. 使用Qiniu-JavaScript-SDK上传文件至七牛云存储

    一.Qiniu-JavaScript-SDK介绍 基于 JS-SDK 可以方便的从浏览器端上传文件至七牛云存储,并对上传成功后的图片进行丰富的数据处理操作. JS-SDK 兼容支持 H5 File A ...

  5. Laravel-admin 七牛云上传文件到七牛云出现卡顿失败情况

    由于所做项目需要管理后台众多,所以选择了Laravel-admin后台框架进行开发.节省了权限控制以及页面处理等问题的时间 Laravel-admin文档地址 http://laravel-admin ...

  6. laravel上传文件到七牛云存储

    背景 最近在用PHP和laravel框架做一个图片网站,需要将图片存贮到云端,搜索下了对比了下功能,发现七牛云存储不错(主要小流量免费),便选择使用七牛作为图片存储空间. 要实现的功能很简单,选择本地 ...

  7. java(SSM)上传文件到七牛云(对象存储)

    项目中会用到大量的图片和小视频,为了分担服务器压力,将文件都放在七牛云.这里的思路很简单, 就是移动端.pc端把文件上传到服务器,服务器做一个临时缓存,保存必要的信息到数据库后, 将文件上传到七牛云, ...

  8. 使用python3.7+Vue.js2.0+Django2.0.4异步前端通过api上传文件到七牛云云端存储

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_130 之前一篇文章是通过普通js+tornado来上传七牛云:使用Tornado配合七牛云存储api来异步切分上传文件,本次使用v ...

  9. 记一次上传文件到七牛云存储的经历(Plupload & UEditor)(.net)

    七牛 配置ACCESS_KEY和SECRET_KEY Qiniu.Conf.Config.ACCESS_KEY = "ACCESS_KEY"; Qiniu.Conf.Config. ...

随机推荐

  1. Codeforces Round #396 (Div. 2) E. Mahmoud and a xor trip

    地址:http://codeforces.com/contest/766/problem/E 题目: E. Mahmoud and a xor trip time limit per test 2 s ...

  2. Winform ObservableCollection 添加删除修改无效

    WPF中ObservableCollection 可以很好的使用. 在Winform中,之前使用ObservableCollection 做了几个功能,貌似增删改都可以. 今天写个Demo的时候发现不 ...

  3. 非阻塞套接字与IO多路复用

    我们了解了socket之后已经知道,普通套接字实现的服务端的缺陷:一次只能服务一个客户端! 并且,为了使一个客户端能够不断收发消息,我们还要使用while循环来轮询,这极大地降低了我们的效率 acce ...

  4. cocoa中获得root权限的几种方法

    目前我所知道的,在cocoa中获得root权限的方法有3种: 1. 通过AuthorizationCopyRights函数 2. 在UI上添加一个锁的样子的控件,然后通过开关这个锁来获取root权限 ...

  5. JS中函数之外不能写return

    JS中return有时会遇到这种情况,具体表现为:google浏览器等浏览器可以继续执行,IE浏览器不能执行return,并且google浏览器:执行时会显示SyntaxError: Illegal ...

  6. HDU 1238 Substing

    思路: 1.找出n个字符串中最短的字符串Str[N] 2.从长到短找Str[N]的子子串 subStr[N],以及subStr[N]的反转字符串strrev(subStr[N]):(从长到短是做剪枝处 ...

  7. iOS开发进阶 - 使用Carthage管理iOS第三方库

    移动端访问不佳,请访问我的个人博客 最近在研究Swift,一不小心发现一个好的的管理iOS第三方库Carthage,就跟第一次使用CocoaPods时一样兴奋不已,在研究了大半天后终于能用了,使用起来 ...

  8. Record and accumulation

    最近有同学在准备校招的问题,问我几个问题,我觉得有必要把大家的问题汇总下: 1.在设计变量的while指挥时候,可以利用弹栈的特性以及Java传值 只是传递的副本  去控制 : https://www ...

  9. 电脑 HOST 文件

    路径: C:\Windows\System32\drivers\etc\HOSTS

  10. sublime使用记录之快速生成html5基本模板

    sublime使用记录之快速生成html5基本模板 效果如图: