利用HTTP方式上传

新手小白如何学习编程 学习目标推荐第一门语言优势网站 / APP 开发(前端)JavaScript浏览器原生支持,能快速做出可视化效果后端 / 服务器 / 数据分析Python语法简洁像英语,库多、应用广(入门友好)游戏开发先用电竞入门,再转专业引擎硬件 / 嵌入式(比如单片机)C 语言贴近硬件,行业标准办公自动化(Excel / 文档处理)Python快速解决重复工作(比如批量改文件)👉新手首选推荐。 阅读详情
#include <afxdtctl.h>
#include <Windows.h>
#include <WinINet.h>
#include <stdio.h>
BOOL UseHttpSendReqEx(HINTERNET hRequest, DWORD dwPostSize,CString strLocalFile);
BOOL Upload(CString bstrLocalFile,CString bstrServerIP,CString strServerPort,CString bstrRemoteFile);
#define BUFFSIZE 500

void main( int argc, char **argv )
{

    if (argc < 5)
    {
        printf("Usage: Bigpost <LocalFile> <ServerIP><ServerPort><ReomteFile>/n");
        printf("<LocalFile> is the local file to POST/n");
        printf("<ServerIP> is the server's IP to POST to/n");
        printf("<ServerPort> is the server's Port to POST to/n");
        printf("<ReomteFile> is the virtual path to POST to/n");
        exit(0);
    }
    Upload(argv[1],argv[2],argv[3],argv[4]);
}
BOOL UseHttpSendReqEx(HINTERNET hRequest, DWORD dwPostSize,CString strLocalFile)
{
    DWORD dwRead;
    BYTE* buffer;
    printf("Local file:%s/n",strLocalFile);
    FILE* fLocal;
    if((fLocal=fopen(strLocalFile,"rb"))==NULL){
        printf("Can't open the file:%s,maybe it doesn't exist!/n",strLocalFile);
            return false;
    }
    fseek(fLocal,0L,SEEK_END);
    dwRead=ftell(fLocal);
    rewind(fLocal);
        buffer=(BYTE *)malloc(dwRead);
        if(!buffer){
            printf("not enough memory!/n");
            return false;
        }
        printf("length of file:%d/n",dwRead);
        dwRead=fread(buffer,1,dwRead,fLocal);
        dwPostSize=dwRead;

    INTERNET_BUFFERS BufferIn;
    DWORD dwBytesWritten;
    BOOL bRet;
    BufferIn.dwStructSize = sizeof( INTERNET_BUFFERS ); // Must be set or error will occur
    BufferIn.Next = NULL; 
    BufferIn.lpcszHeader = NULL;
    BufferIn.dwHeadersLength = 0;
    BufferIn.dwHeadersTotal = 0;
    BufferIn.lpvBuffer = NULL;                
    BufferIn.dwBufferLength = 0;
    BufferIn.dwBufferTotal = dwPostSize; // This is the only member used other than dwStructSize
    BufferIn.dwOffsetLow = 0;
    BufferIn.dwOffsetHigh = 0;

    if(!HttpSendRequestEx( hRequest, &BufferIn, NULL, 0, 0))
    {
        printf( "Error on HttpSendRequestEx %d/n",GetLastError() );
        return FALSE;
    }
    bRet=TRUE;
        if(bRet=InternetWriteFile( hRequest, buffer, dwPostSize, &dwBytesWritten))
            printf( "/r%d bytes sent.", dwPostSize);
    if(!bRet)
    {
        printf( "/nError on InternetWriteFile %lu/n",GetLastError() );
        return FALSE;
    }

    if(!HttpEndRequest(hRequest, NULL, 0, 0))
    {
        printf( "Error on HttpEndRequest %lu /n", GetLastError());
        return FALSE;
    }
        fclose(fLocal);
    free(buffer);
    return TRUE;
}

BOOL Upload(CString strLocalFile,CString strServerIP,CString strServerPort,CString strRemoteFile){
    DWORD dwPostSize=0;
    int intServerPort=atoi(strServerPort);
    HINTERNET hSession = InternetOpen( "HttpSendRequestEx", INTERNET_OPEN_TYPE_PRECONFIG,
        NULL, NULL, 0);
    if(!hSession)
    {
        printf("Failed to open session/n");
        return FALSE;
    }
    HINTERNET hConnect = InternetConnect(hSession, strServerIP, intServerPort,
        NULL, NULL, INTERNET_SERVICE_HTTP,NULL, NULL);
    if (!hConnect){
        printf( "Failed to connect/n" );
        return FALSE;
    }else{
        HINTERNET hRequest = HttpOpenRequest(hConnect, "PUT", strRemoteFile, 
            NULL, NULL, NULL, INTERNET_FLAG_NO_CACHE_WRITE, 0);
        if (!hRequest){
            printf( "Failed to open request handle/n" );
        }else{
            if(UseHttpSendReqEx(hRequest, dwPostSize,strLocalFile))
            {    
                char pcBuffer[BUFFSIZE];
                DWORD dwBytesRead;

                printf("/nThe following was returned by the server:/n");
                do
                {    dwBytesRead=0;
                    if(InternetReadFile(hRequest, pcBuffer, BUFFSIZE-1, &dwBytesRead))
                    {
                        pcBuffer[dwBytesRead]=0x00; // Null-terminate buffer
                        printf("%s", pcBuffer);
                    }
                    else
                        printf("/nInternetReadFile failed");
                }while(dwBytesRead>0);
                printf("/n");
            }
            if (!InternetCloseHandle(hRequest))
                printf( "Failed to close Request handle/n" );
        }
        if(!InternetCloseHandle(hConnect))
            printf("Failed to close Connect handle/n");
    }
    if( InternetCloseHandle( hSession ) == FALSE ){
        printf( "Failed to close Session handle/n" );
        return FALSE;
    }
    printf( "/nFinished./n" );
    return TRUE;
}
Android息屏后台任务保活实战:从定时器失效到厂商白名单破解 本文深入探讨了Android应用在息屏后定时任务失效的根源,即系统为省电而触发的休眠机制。文章提供了从传统方案失效分析到实战破解的完整路径,核心在于引导用户将应用加入电池优化白名单并开启自启动权限,从而合法绕过限制。同时,结合WorkManager、AlarmManager等可靠定时方案,实现稳定的后台任务执行。 阅读详情

相关推荐

Python自动化车载测试:5分钟搞定CANoe COM接口调用(附完整代码)

本文详细介绍了如何使用Python快速实现CANoe COM接口调用,完成车载测试自动化。通过实战案例展示ECU信号测试框架搭建,包括环境配置、核心架构解析、信号读写封装及多线程安全方案,帮助开发者5分钟内掌握高效测试技巧。

vv45678的博客 1131

利用HTTP方式上传(代码)

#include #include #include #include BOOL UseHttpSendReqEx(HINTERNET hRequest, DWORD dwPostSize,CString strLocalFile);BOOL Upload(CString bstrLocalFile,CString bstrServerIP,CString strServerPort,CStrin

酷狗的窝(kugou123) 1686

工程师必看:如何用功率谱密度搞定随机振动测试(附Grms计算实例)

本文为工程师详解如何通过功率谱密度(PSD)曲线计算Grms(总均方根加速度),从而量化随机振动测试的强度。文章拆解了平直谱、斜谱的计算公式,提供了完整的Grms计算实例,并指出了单位换算、对数坐标等常见工程陷阱,帮助工程师精准完成测试准备与设备推力评估。

3c4x5z6v7b的博客 625

http协议上传文件到指定服务器

package cmcc.gz.platform.hbqj.utils; import java.io.File; import java.net.FileNameMap; import java.net.URLConnection; import org.apache.commons.httpclient.HttpClient; import org.apache.common

u012365843的专栏 2591

DeepSeek API调用太复杂?OneAPI一站式聚合解决方案

本文介绍了OneAPI如何作为一站式聚合解决方案,简化DeepSeek API的调用流程。通过统一接口、智能路由和模型映射等核心功能,OneAPI大幅降低了多API适配的复杂性,提升开发效率。文章还提供了详细的部署指南和高阶使用技巧,帮助开发者快速实现API聚合管理。

weixin_27215337的博客 381

【收藏向】模拟电子技术超强知识点总结 20小时不挂科

模电真的有难度的一门课,一定要好好学… 用的教材是华科康华光版,其他版本教材也可参考,内容是差不多的。 话不多说直接上思维导图干货(后有思维导图高清原图链接) 1 绪论 2 运算放大器 3 二极管及其基本电路 4 场效应管及其放大电路 5 双极结型三极管及其放大电路 三种组态总结看不清,给个特写 发现虽然csdn上传的是原图,但是显示的图片不是特别清晰,在此贴出B站知乎地址,第五章之后的内容都在上面,还可以查看原图 ———————————————————— B站专栏地址(可以点击查看原图) htt

工科狗Niko的博客 1万+

微信小程序后台的HTTP API 上传文件功能

项目场景: 最近帮一家公司做微信小程序,采用微信云开发技术,实现后台,遇到一个上传文件的功能,一开始一直报错是提交的body格式不对,后来测试很多次才找出解决方法。

来瓶小白干Oo的博客 2424

STMCubeMX使用TB6612驱动编码轮并进行测速

TB6612电机驱动模块通过IN1和IN2引脚控制电机的旋转方向,并通过PWM信号的占空比调节电机速度。代码示例展示了如何使用GPIO控制电机的正反转,以及如何动态调整PWM占空比实现速度控制。系统设计中,TB6612与编码减速电机连接,STM32CubeMX用于初始化GPIO和PWM输出。编码器接口配置使用TIM3进行测速,TIM4定时器用于速度计算。Keil软件中编写的代码包括编码轮计数值获取、速度计算、电机正反转控制以及小车运动控制等功能。通过OLED显示速度,并实现电机的调试与测试。

wwivn的博客 2259

怎么发送采集数据到网站-http接口方式

用http接口方式发送数据到网站,非常方便与灵活的, 可以把采集到的数据,快速自动化批量发送到网站!

keydatas的博客 3206

华为ENSP虚拟网络与本地物理网卡高效桥接实战指南

本文提供了一份详细的华为ENSP虚拟网络与本地物理网卡桥接实战指南。通过清晰的四步操作,帮助用户打破虚拟实验环境的“孤岛”限制,实现ENSP设备与真实局域网及互联网的互通,从而进行更真实的协议测试、软件升级和混合网络环境搭建。

qsc90123456的博客 537

RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)

RH850从0搭建Autosar开发环境【7】- Davinci Configurator之CanTp模块配置详解(上)

weixin_42412049的博客 2297

httpClient使用详解和上传文件到指定的http地址

http协议的重要性相信不用我多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性(具体区别,日后我们再讨论),它不仅是客户端发送Http请求变得容易,而且也方便了开发人员测试接口(基于Http协议的),即提高了开发的效率,也方便提高代码的健壮性。因此熟练掌握HttpClient是很重要的必修内容,掌握HttpClient后,相信对于Http协议的了解会

goodyuedandan的博客 2592

【PCIe EP 设备入门学习专栏 -- 8 PCIe EP 架构详细介绍】

Synopsys PCIe 5.0 EP 架构由多个功能模块组成,整体遵循分层 + 模块化设计CXPL(事务层 + 链路层 + 物理层 MAC)XADM(仲裁/生成)、XAIM(应用接口)RADM(过滤/路由/Completion)CDM(配置空间)、PMC(电源管理)、LBC/DBI(寄存器访问)MSG_GEN(消息)、CXS(多芯片一致性)

CodingCos的博客 381

利用HTTP方式上传-windows编程

#include #include #include #include BOOL UseHttpSendReqEx(HINTERNET hRequest, DWORD dwPostSize,CString strLocalFile);BOOL Upload(CString bstrLocalFile,CString bstrServerIP,CString strServerP

keenflyfox的专栏 550

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上传文件的几种方式

1、通过http请求 (1)、首先写客服端,winform模拟一个post提交: /// /// 将本地文件上传到指定的服务器(HttpWebRequest方法) /// /// 文件上传到的服务器 /// 要上传的本地文件(全路径) /// 文件上传后的名称 /// 上传进度条

ZLHZHJ的专栏 5959

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

openresty 静态库_lua-resty-http上传数据

lua-resty-http上传数据lua-resty-http是一个基于Openresty/ngx_lua的HTTP客户端,支持POST方法上传数据。用法很简单。content_by_lua_block {local http = require "resty.http"local httpc = http:new()local res = httpc:request_uri("http://w...

weixin_39740346的博客 832

IntelliJ IDEA 模拟 POST方式 上传文件

IntelliJ IDEA 模拟 POST方式 上传文件

ideal-lingyun 1830

java文件上传jsp教程JavaBean实现多文件上传的两种方法

jsp教程JavaBean实现多文件上传的两种方法[日期:2009-05-05]来源:  作者: jsp教程JavaBean实现多文件上传的两种方法摘要:本文介绍了JavaBean实现多个文件上传的两种方法,分别是使用http协议和ftp协议实现。首先讲述了http协议传送多个文件的基本格式和实现上传的详细过程,之后简单介绍了使用ft

chengengfeng的专栏 1289

高效便捷的文件上传解决方案:C实现HTTP POST方式上传文件

高效便捷的文件上传解决方案:C#实现HTTP POST方式上传文件 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代应用程序开发中,文件上传是一个常见且重要的功能。无论是用户上传头像、文档,还是系统内部的数据传输,高效、稳定的文件上传机制都是不可或缺的。为了满足这一需求,我们推出了一个使用C#实现的HTTP POST方式上传文件的示例代码项目。该项目不仅提供了基本...

gitblog_09764的博客 448

element-文件上传-自定义上传方式

element-文件上传-自定义上传方式 这次主要写的是el-upload这个组件中的http-request钩子,首先来看一下官方的: 非常的简洁,简洁到完全看不懂了,简直了。 先展示一下我的成果,记得先把jquery,vue,element引入 <el-upload></el-upload> ...

横行的螃蟹的博客 4078

java 利用http发送文件

发送方: import java.io.BufferedReader; import java.io.File; import java.io.InputStream; import java.io.InputStreamReader; import java.sql.SQLOutput; import java.text.ParseException; import java.text.S...

a3215q的博客 5588

【前端相关】elementui使用el-upload组件实现自定义上传

官方的描述是说 覆盖默认的上传行为,可以自定义上传的实现,类型是 function,可选值与默认值都省略。经过我的探索,我发现它可以接收一个参数,这个参数保存了你文件上传的对象。elmentui 中的upload默认的提交行为是通过 action 属性中输入的 url 链接,提交到指定的服务器上。先定义了一个 el-upload标签,在里面先把自动上传文件关闭,由于action是必填项,所以就塞了个#进去,在。在这个函数里面,我实现了自定义文件上传的请求。上传文件之前的钩子,参数为上传的文件,若返回。

No8g攻城狮的博客 3万+

【Android基础知识】使用Http和HttpClient上传文件

分别使用Http方式和HttpClient方式向服务器上传图片 服务器端 建立UploadServlet.java 文件,接收上传的文件数据,指定在服务器端存储的位置。 /** * * @author meng.li * 指定文件的存储位置为E盘 */ @MultipartConfig( location ="E:\\" ) public class UploadServlet

自由世界的专栏 3520

http请求

package com.hes.tools.net.httpnet;   import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.InputStream; import java.io.UnsupportedEncoding

TryCatch 1453

IIS6.0解析漏洞——PUT方式上传文件

IIS6.0解析漏洞IIS6.0解析漏洞解析漏洞原理介绍PUT上传原理PUT上传探测PUT上传利用(漏洞复现)PUT的利用COPY的利用PUT文件上传防范解析漏洞防范补充:HTTP 中请求方式汇总1. OPTION2. HEAD3. PUT4. DELETE5. TRACE6. CONNECT IIS6.0解析漏洞 解析漏洞原理介绍 1. 当建立 *.asa、*.asp 格式的文件夹时,其目录下的任意文件都被IIS当做asp文件解析 2. 当文件是 *.asp;1.jpg ,IIS6.0同样会将文件作为a

buffedon的博客 5360

Vue Element UI + OSS上传文件

  Element UI提供了upload上传组件,可以到官网查看upload组件的详细介绍;查看upload组件的上传源码upload/ajax,使用的XHR对象上传文件,在项目实践中,发现该上传方法上传大文件时会出现问题,所以决定使用阿里云对象存储服务(Object Storage Service,简称OSS),OSS详细介绍可以查看官网,本文主要讲解的是OSS上传文件的前端,Browser....

山水子农 2万+

如何在Symbian中使用Http上传大文件

最近因为项目的关系,研究了一下在Symbian中使用Http协议上传multipart/form-data格式数据的实现方法。由于要求上传的数据较大,所以研究了如何在Nokia Http Exmaple的基础上,使用MHTTPDataSupplier派生类分包上传的实现。1.在实现Http协议的类中(以HttpEngine为例),需要重写下面几个函数:void SetupConnectionL();void IssueHTTPGetL();void IssueHTTPPostL();void IssueHT

chuckGao的专栏 2873
上一篇: 关于Debug和Release之本质区别的讨论
下一篇: VC中使用存储过程
goingup
博客等级 码龄22年 52粉丝 158原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值