使用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. VMWare 网络连接模式(bridged、NAT、host-only)详解

    转自VMWare 网络连接模式(bridged.NAT.host-only)详解 host-only 在某些特殊的网络调试环境中,如何要求将真实环境和虚拟环境隔离开,这时你就可采用host-only模 ...

  2. 拓扑排序(附LeetCode题目)

    算法期中考到一题关于拓扑序的题目,觉得很值得一写. 1.什么是拓扑序? 对一个有向无环图进行拓扑排序,假如图中存在一条从顶点A到顶点B的路径,则拓扑序中顶点A出现在顶点B的前面.要注意的是,这是对有向 ...

  3. 程序员、架构师、技术总监、CTO

    程序员 程序员,英文名coder/programmer,大家常自嘲叫码农的阶段.这个角色职责是把需求或产品实现为用户可用的软件产品. 此职位为执行级别.另外因为经验较少,一般需要求助别人,或与别人一起 ...

  4. spring配置中classpath: 与classpath*:的区别

    classpath和classpath*区别:  classpath:只会到你的class路径中查找找文件. classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找 ...

  5. jetbrains goland 跳到上一个光标处

    查了下是 :Ctrl + Alt + 左右 mac下面是:Command+ Alt + 左右键 但是我用下来是切上面打开文档页 摸索了下是:Ctrl +Win+ Alt + 左右  我的键的映射是De ...

  6. Routing in ASP.NET Web API

    Why is HttpGet required only for some actions? https://stackoverflow.com/questions/28068868/why-is-h ...

  7. JAVA实现IP地址解析

    转载至:http://blog.csdn.net/dragontang/article/details/4151660 http://www.iteye.com/topic/340548#

  8. spring的几个通知(前置、后置、环绕、异常、最终)

    1.没有异常的 2.有异常的 1.被代理类接口Person.java package com.xiaostudy; /** * @desc 被代理类接口 * * @author xiaostudy * ...

  9. Windows 10 操作系统删除Administrator登录选项

    在win10操作系统锁屏界面登录选项中突然出现了两个用户选项,一个是自己微软账户登录的用户,另一个是Administrator登录选项,每次看到好别扭,怎么去掉呢? 一.以管理员身份运行命令提示符(c ...

  10. SSH学习(2)

    SVN概述 1 SVN体系结构 (1)svn服务器 -首先在svn服务器里面创建 仓库 (2)svn客户端 SVN服务器安装和使用 0 首先把项目add到svn服务器上 清除不小点击保存密码的设置 修 ...