http上传文件步骤

使用Wininet API上传文件到Web Server。它分为客户端和服务端两块,客户端负责连接服务器,发送数据给服务端;服务端负责接收数据,保存。

客户端:
URL的组成:举个例子:http://myWebServer:8080/Handler/FileUploader.aspx
 "myWebServer"为Server Host Name,它用来表示服务器的IP地址。
“8080”是该服务器对http开发的端口号,默认为80,https 默认端口143
“/Handler/FileUploader.aspx”就是这个URL的UrlPath了

1. 用 InternetOpen 创建一个表示该次连接的Internet句柄

HINTERNET hSession = InternetOpen(_T("WinInetGet/0.1"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, NULL);

2.用 InternetConnect 与指定服务器连接,获得本次连接句柄

//nPort:端口

HINTERNET hConnection = ::InternetConnect(hSession, szServerHostName, nPort, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);

3. 用HttpOpenRequest向服务器发送请求

HINTERNET hRequest = ::HttpOpenRequest(hConnection, _T("POST"), szUrlPath, "HTTP/1.1",NULL, NULL, NTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP |INTERNET_FLAG_KEEP_CONNECTION |INTERNET_FLAG_RELOAD,NULL);

4.用HttpSendRequestEx向服务器上传文件请求

INTERNET_BUFFERS BufferIn;
BufferIn.dwStructSize = sizeof(INTERNET_BUFFERS);
BufferIn.Next = NULL;
BufferIn.lpcszHeader = NULL;
BufferIn.dwHeadersLength = 0;
BufferIn.dwHeadersTotal = 0;
BufferIn.lpvBuffer = NULL;
BufferIn.dwBufferLength = 0;
BufferIn.dwBufferTotal = dwUploadDataSize
+ strlen(first_boundary)
+ strlen(strPostData.c_str())
+ strlen(end_boundary);
BufferIn.dwOffsetLow = 0;
BufferIn.dwOffsetHigh = 0;

if (!HttpSendRequestEx(hRequest, &BufferIn, 0, 0, 0)){};

5.用InternetWriteFile传送数据,传送文件的话,需要将文件数据不断读取到buffer里,并用InternetWriteFile发送出去。

DWORD dwNumberOfBytesWritten(0);
if(!::InternetWriteFile(hRequest, (void*)first_boundary, strlen(first_boundary), &dwNumberOfBytesWritten) ||
!::InternetWriteFile(hRequest, (void*)strPostData.c_str(), strlen(strPostData.c_str()), &dwNumberOfBytesWritten) ||
!::InternetWriteFile(hRequest, pUploadData, dwUploadDataSize, &dwNumberOfBytesWritten) ||
!::InternetWriteFile(hRequest, (void*)end_boundary, strlen(end_boundary), &dwNumberOfBytesWritten))

6.用HttpEndRequest()等待服务器处理。这个时候,客户端的执行实际上是停止在这里的,只有当服务段接受完数据,完成处理后,客户端才接着执行下去。

if (!::HttpEndRequest(hRequest, NULL, 0, 0)){};

http上传文件流程 使用winlnet相关推荐

  1. 文件服务器上传文件流程,上传文件到服务器流程

    上传文件到服务器流程 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分别安装数据传 ...

  2. 文件上传下载流程设计

    最近在写一个文件上传下载的服务端和客户端,在开发之前把交互流程大概设计了一下顺便分享出来,流程主要包括验证,交口端口验证,文件上和文件下载等功能.之于文件删除,在线压缩和解压等流程相对简单所以就不列出 ...

  3. 七牛 savekey php,七牛云1:客户端直接上传文件

    最近因为项目要用到七牛云,所以花了点时间整理了一下学习心得. 使用七牛云,第一步当然就是上传文件了,常见的云存储上传文件流程一般有3种: 用户==>业务服务器(你自己的服务器)==>云存储 ...

  4. 使用SmartUpload组件上传文件

    刚刚上手的项目 被文件上传困扰了好久,之前用fileupload组件上传,代码参考孤傲苍狼博客,可是除了文件名,表单内的其他内容不知道该怎么读出来进行存储:所以此次采用smartupload组件进行上 ...

  5. github文件上传全流程-新手入门系列

    1.获取网络连接 直接访问github网站是非常慢的,甚至有时可能不能访问,所以需要重新获取网络连接. 使用下面网站:https://tool.chinaz.com/dns/ ->在输入框中输入 ...

  6. 七牛云上传文件之表单上传文件

    本人愚钝,七牛云上传文件的开发说明文档看了好久才搞懂,才能完成一个实例跑起来.现在做一下总结. 1.注册七牛,新建一个bucket,并获得ak,sk这个不用说了.不涉及到程序编码,重点讲一下编码的流程 ...

  7. 文件怎么上传远程服务器,怎么上传文件到远程服务器

    怎么上传文件到远程服务器 内容精选 换一换 将文件上传至Windows云服务器一般会采用MSTSC远程桌面连接的方式.本节为您介绍本地Windows计算机通过远程桌面连接,上传文件至Windows云服 ...

  8. php的$_FILES如何生成以及如何与上传文件对象产生联系

    一.前言 写这篇博客的原因是因为,在上传文件的时候,我们都知道要用$_FILES变量来获取上传的内容,但是$_FILES是什么使用开始有值的呢?我们上传的是二进制参数,为什么在后台不能通过$_POST ...

  9. Silverlight从客户端上传文件到服务器

    这里介绍的是一种利用WebClient手动发送Stream到服务器页面的上传文件方法. 一.服务器接收文件 这里使用一个ASHX页面来接收和保存Silverlight传来的Stream,页面代码如下: ...

最新文章

  1. HTML 5 中的新元素2
  2. IoT和AI如何让企业在疫情期间重启业务
  3. Zabbix的故障与恢复邮件设置
  4. CentOS 7下安装Logstash ELK Stack 日志管理系统(上)
  5. 【328天】每日项目总结系列066(2017.12.30)
  6. echarts java动态数据_[ASP.net教程]ECharts Java 动态加载数据,echartsjava
  7. css让image不改变大小_如何改变图片大小
  8. 前端学习-jQuery源码学习
  9. java网上购物系统_Java Web 应用教程——网上购物系统的实现
  10. Off World Live 插件:广播UE4内部的音频信号到NDI
  11. 别对“智能写作”太过情感依赖
  12. python3 使用writerows写入csv时有多余空行的处理办法
  13. 十大经典的心理学效应
  14. 08. Web大前端时代之:HTML5+CSS3入门系列 ~ QQ空间时间轴
  15. 计算机控制键有哪些,常用的电脑快捷键大全有哪些
  16. 《测绘综合能力》真题易错本
  17. Qt Quick 4小时入门-安晓辉-专题视频课程
  18. 跟着猴博士复试概率论(第二部分)
  19. java 圈复杂度
  20. 对java 链表删除节点 引用误区理解:对局部变量 cur= cur.next及cur.next=cur.next.next,及cur.next = cur.next.next.next的理解图解

热门文章

  1. python基础知识
  2. 数据说的舆情分析的算法模型的建立
  3. USACO2018 OPEN TEST - Silver
  4. Qt 5入门指南之Qt Quick编程示例
  5. # MASA MAUI Plugin (十)iOS消息推送(原生APNS方式)
  6. XL4015-ADJ 5A 大电流DC-DC原理图分享
  7. windows下启动redis命令(笔记)
  8. pandas 生成笛卡尔集
  9. html使用thymeleaf模板时,获取数据库中字符串值,拆分为list根据下标获取对应的值的方法
  10. 第2章第27节:英文排版技巧:大间距与大行距的应用 [PowerPoint精美幻灯片实战教程]