libcurl 上传文件至 web服务器

简介: 测试环境搭建, 使用 wamp server (windows下的 apache+MySQL+php)    libcurl vc6 工程代码  下载地址:  http://download.csdn.

测试环境搭建, 使用 wamp server (windows下的 apache+MySQL+php) 

 

libcurl vc6 工程代码  下载地址:  http://download.csdn.net/detail/mtour/8060775

 

处理上传文件 php  代码

 

 

[php]  view plain  copy
 
 在CODE上查看代码片派生到我的代码片
  1. <?php  
  2.     
  3.   if ($_FILES["file"]["error"] > 0)  
  4.     {  
  5.     echo "Return Code: " . $_FILES["file"]["error"] . "<br />";  
  6.     }  
  7.   else  
  8.     {  
  9.     echo "Upload: " . $_FILES["file"]["name"] . "<br />";  
  10.     echo "Type: " . $_FILES["file"]["type"] . "<br />";  
  11.     echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";  
  12.     echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";  
  13.   
  14.     if (file_exists("./" . $_FILES["file"]["name"]))  
  15.       {  
  16.       echo $_FILES["file"]["name"] . " already exists. ";  
  17.       }  
  18.     else  
  19.       {  
  20.       move_uploaded_file($_FILES["file"]["tmp_name"],  
  21.       "./" . $_FILES["file"]["name"]);  
  22.       echo "Stored in: " . "/" . $_FILES["file"]["name"];  
  23.       }  
  24.     }  
  25. ?>  


libcurl  代码

 

 

 

[cpp]  view plain  copy
 
 在CODE上查看代码片派生到我的代码片
    1. // libCur1.cpp : Defines the entry point for the console application.  
    2. //  
    3.   
    4. #include "stdafx.h"  
    5. #include <stdio.h>  
    6. #include "curl/curl.h"  
    7.   
    8. #define MAX_BUFF_LEN 1048576 /*1M*/  
    9. #define POST_URL "http://10.10.1.4/d/upload.php"  
    10.   
    11.   
    12. int get_file_size(char *filename)  
    13. {  
    14.     FILE* fp = NULL;  
    15.     int nFileLen = 0;  
    16.       
    17.     fp = fopen(filename, "rb");  
    18.       
    19.     if (fp == NULL)  
    20.     {  
    21.         return 0;  
    22.     }  
    23.       
    24.     fseek(fp,0,SEEK_END); //定位到文件末   
    25.     nFileLen = ftell(fp); //文件长度  
    26.     return nFileLen;  
    27. }  
    28.   
    29. int http_post_file(const char *url, const char *filename)  
    30. {  
    31.     CURL *curl = NULL;  
    32.        CURLcode res;  
    33.   
    34.       struct curl_httppost *post=NULL;  
    35.       struct curl_httppost *last=NULL;  
    36.       struct curl_slist *headerlist=NULL;  
    37.   
    38.     if(filename == NULL || url == NULL)  
    39.         return -1;  
    40.   
    41.     printf("URL: %s\n", url);  
    42.     printf("filename: %s\n", filename);  
    43.   
    44.     /* Add simple file section */  
    45.     if( curl_formadd(&post, &last, CURLFORM_COPYNAME, "file",  
    46.                CURLFORM_FILE, filename, CURLFORM_END) != 0)  
    47.     {  
    48.         fprintf(stderr, "curl_formadd error.\n");  
    49.         return -1;  
    50.     }  
    51.       
    52.       /* Fill in the submit field too, even if this is rarely needed */  
    53.       curl_formadd(&post, &last,  
    54.                CURLFORM_COPYNAME, "submit",  
    55.                CURLFORM_COPYCONTENTS, "OK",  
    56.                CURLFORM_END);  
    57.   
    58.     //curl_global_init(CURL_GLOBAL_ALL);  
    59.     curl = curl_easy_init();  
    60.     if(curl == NULL)  
    61.     {  
    62.         fprintf(stderr, "curl_easy_init() error.\n");  
    63.         curl_formfree(post);  
    64.         return -1;  
    65.     }  
    66.   
    67.     curl_easy_setopt(curl, CURLOPT_HEADER, 0);  
    68.     curl_easy_setopt(curl, CURLOPT_URL, url); /*Set URL*/  
    69.     curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);  
    70.     int timeout = 5;  
    71.     curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout);  
    72.     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);  
    73.     curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1);  
    74.   
    75.     res = curl_easy_perform(curl);  
    76.     if(res != CURLE_OK)  
    77.     {  
    78.         fprintf(stderr, "curl_easy_perform[%d] error.\n", res);  
    79.         curl_formfree(post);  
    80.         return -1;  
    81.     }  
    82.   
    83.     curl_easy_cleanup(curl);      
    84.   
    85.     return 0;  
    86. }  
    87.   
    88. int main()  
    89. {     
    90.   
    91.     char sFilePath[128]="d:\\20130828131421113.jpg";  
    92.   
    93.     //Check File Size  
    94.     if(get_file_size(sFilePath) >= MAX_BUFF_LEN)  
    95.     {  
    96.         fprintf(stderr, "File Size is Big!\n");  
    97.         return -1;  
    98.     }  
    99.   
    100.     //POST File  
    101.     http_post_file(POST_URL, sFilePath);  
    102.   
    103.     getchar();  
    104.   
    105.     return 0;  
    106. }  
目录
相关文章
|
2月前
SecureCRT 通过xftp命令行上传文件到服务器上
SecureCRT 通过xftp命令行上传文件到服务器上
135 1
|
2月前
|
Java PHP
PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。理解其垃圾回收机制有助于开发高效稳定的PHP应用。
【10月更文挑战第1天】PHP作为广受青睐的服务器端脚本语言,在Web开发中占据重要地位。其垃圾回收机制包括引用计数与循环垃圾回收,对提升应用性能和稳定性至关重要。本文通过具体案例分析,详细探讨PHP垃圾回收机制的工作原理,特别是如何解决循环引用问题。在PHP 8中,垃圾回收机制得到进一步优化,提高了效率和准确性。理解这些机制有助于开发高效稳定的PHP应用。
50 3
|
4月前
|
JavaScript 搜索推荐 前端开发
从零搭建到部署:Angular与Angular Universal手把手教你实现服务器端渲染(SSR),全面解析及实战指南助你提升Web应用性能与SEO优化效果
【8月更文挑战第31天】服务器端渲染(SSR)是现代Web开发的关键技术,能显著提升SEO效果及首屏加载速度,改善用户体验。Angular Universal作为官方SSR解决方案,允许在服务器端生成静态HTML文件。本文通过具体示例详细介绍如何使用Angular Universal实现SSR,并分享最佳实践。首先需安装Node.js和npm。
93 1
|
4月前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
186 0
|
4月前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
45 0
|
4月前
|
Java 数据库 API
JSF与JPA的史诗级联盟:如何编织数据持久化的华丽织锦,重塑Web应用的荣耀
【8月更文挑战第31天】JavaServer Faces (JSF) 和 Java Persistence API (JPA) 分别是构建Java Web应用的用户界面组件框架和持久化标准。结合使用JSF与JPA,能够打造强大的数据驱动Web应用。首先,通过定义实体类(如`User`)和配置`persistence.xml`来设置JPA环境。然后,在JSF中利用Managed Bean(如`UserBean`)管理业务逻辑,通过`EntityManager`执行数据持久化操作。
60 0
|
4月前
|
JavaScript 前端开发 UED
服务器端渲染新浪潮:用Vue.js和Nuxt.js构建高性能Web应用
【8月更文挑战第30天】在现代Web开发中,提升应用性能和SEO友好性是前端开发者面临的挑战。服务器端渲染(SSR)能加快页面加载速度并改善搜索引擎优化。Vue.js结合Nuxt.js提供了一个高效框架来创建SSR应用。通过安装`create-nuxt-app`,可以轻松创建新的Nuxt.js项目,并利用其自动路由功能简化页面管理。Nuxt.js默认采用SSR模式,并支持通过`asyncData`方法预取数据,同时提供了静态站点生成和服务器端渲染的部署选项,显著提升用户体验。
90 0
|
20天前
|
人工智能 弹性计算 编解码
阿里云GPU云服务器性能、应用场景及收费标准和活动价格参考
GPU云服务器作为阿里云提供的一种高性能计算服务,通过结合GPU与CPU的计算能力,为用户在人工智能、高性能计算等领域提供了强大的支持。其具备覆盖范围广、超强计算能力、网络性能出色等优势,且计费方式灵活多样,能够满足不同用户的需求。目前用户购买阿里云gpu云服务器gn5 规格族(P100-16G)、gn6i 规格族(T4-16G)、gn6v 规格族(V100-16G)有优惠,本文为大家详细介绍阿里云gpu云服务器的相关性能及收费标准与最新活动价格情况,以供参考和选择。
|
25天前
|
机器学习/深度学习 人工智能 弹性计算
什么是阿里云GPU云服务器?GPU服务器优势、使用和租赁费用整理
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等多种场景。作为亚太领先的云服务提供商,阿里云的GPU云服务器具备灵活的资源配置、高安全性和易用性,支持多种计费模式,帮助企业高效应对计算密集型任务。
|
26天前
|
存储 分布式计算 固态存储
阿里云2核16G、4核32G、8核64G配置云服务器租用收费标准与活动价格参考
2核16G、8核64G、4核32G配置的云服务器处理器与内存比为1:8,这种配比的云服务器一般适用于数据分析与挖掘,Hadoop、Spark集群和数据库,缓存等内存密集型场景,因此,多为企业级用户选择。目前2核16G配置按量收费最低收费标准为0.54元/小时,按月租用标准收费标准为260.44元/1个月。4核32G配置的阿里云服务器按量收费标准最低为1.08元/小时,按月租用标准收费标准为520.88元/1个月。8核64G配置的阿里云服务器按量收费标准最低为2.17元/小时,按月租用标准收费标准为1041.77元/1个月。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。