使用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 - 86D Powerful array (莫队)

    题意:查询的是区间内每个数出现次数的平方×该数值的和. 分析:虽然是道莫队裸体,但是姿势不对就会超时.答案可能爆int,所以要开long long 存答案.一开始的维护操作,我先在res里减掉了a[p ...

  2. xshell如何同时打开多个标签

    查看标签>>>>>回话选项卡>>>>>> 打钩即可

  3. 【Java Web】把逻辑名映射到servlet文件

    Ⅰ.请求URL Ⅱ.容器搜索DD,查找servlet-mapping <?xml version="1.0" encoding="ISO-8859-1" ...

  4. Python面试题之Python正则表达式指南

    1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...

  5. HTML5相册浏览插件

    在线演示 本地下载

  6. VC++6.0调试简单快捷键

    编译——F7 重新编译——Ctrl+F7 设置断点 ——F9 取消断点——F9 删除所有断点——Ctrl+Shift+F9 开始调试——F5 进行下一次调试——F5 停止调试——Shift+F5 逐过 ...

  7. HBase 协处理器编程详解第一部分:Server 端代码编写

    Hbase 协处理器 Coprocessor 简介 HBase 是一款基于 Hadoop 的 key-value 数据库,它提供了对 HDFS 上数据的高效随机读写服务,完美地填补了 Hadoop M ...

  8. Linux系统官网下载

    CentOS-6.9-x86_64-bin-DVD1.isohttp://archive.kernel.org/centos-vault/6.9/isos/x86_64/CentOS-6.9-x86_ ...

  9. Treflection02_getMethods()_getMethod()

    1. package reflectionZ; import java.lang.reflect.Constructor; import java.lang.reflect.Method; impor ...

  10. python学习笔记(excel+requests)

    已经可以对excel简单的操作后 可以开始通过excel写测试用例 读取用例 执行用例 提前写好execl 如图: 下面是代码: #!/usr/bin/env python # -*- coding: ...