利用Socket提交文件到web server

    前一段时间开发一个WebDAV的客户端,主要是接受发送文件。因为只需要上传下载文件,所以不想使用curl这样重量级的库,所以,基于以上原因自己编写封装一个类,利用socket完成对文件的上传和下载,还可以使用内核函数sendfile实现文件上传时的“零拷贝”。在本例中,同样也给出使用curl方式对文件进行上传操作的方法。针对WebDav的开发还有一个专门的库neon,同样这里也给出使用neon库完成文件上传操作的方法。

    在上传过程中会把大于2M的文件,按2M发送,以防止,当上传文件过大时并且数量过多时,不能及时对其他非文件处理操作请求做出处理。

具体项目说明如下

    USocket类(USocket.h和USocket.cc),创建到远程Web server的本地socket连接,它需要远程的host和port参数,这俩个参数可以从UUri类中获得。

    UUri类(UUri.h和UUri.cc),传递给该类一个URL,比如http://www.exuetang.net:8080/test/test.jpg,该类会把此URL分解为scheme,host,port,path等信息

    Putfile类(Putfile.h和Putfile.cc),上传文件操作类,通过putfile方法,需要webPath和本地文件的path,返回操作状态,以及文件大小。

调用方法

#include
using namespace::std;

#include "Putfile.h"

#define FILENAME "/tmp/file/1.8m.JPG"

using namespace::ucs;

/* 上传文件 */
void putfile(const string& webPath, const string& filename)
{
    Putfile client;
    int fileSize;
    // 上传文件
    UState state = client.putfile(webPath,filename,fileSize);
    if(state == U_OK)
        cout << filename << " -- OK, file size  " << fileSize << endl;
    else
        cout << filename << " -- fail" << state << endl;
}

int
main ( int argc, char *argv[] )
{

    if(argc != 3)
    {
        cout << "./Client method /n";
        cout << "   ./Client webPath fileName/n";
        return 0;
    }else{
        string strWeb = argv[1];
        string strFile = argv[2];
        putfile(strWeb,strFile);
    }
    return EXIT_SUCCESS;
}

执行make命令,然后

./Client http://www.xxx.com/test.dat
test.dat

输出如下的log

Putfile.cc/_sectsendfile[348]: end recv 3784
Putfile.cc/_sectsendfile[351]: send file size: 114688
Putfile.cc/putfile[137]: put file OK
Putfile.cc/putfile[140]: send size 114688| file size 160650
USocket.cc/~USocket[33]: USocket::~USocket()
UUri.cc/~UUri[28]: UUri::~UUri
/tmp/example/abc.jpg -- OK, file size  160650
Putfile.cc/~Putfile[52]: Putfile::~Putfile()

如果不使用sendfile,使用neon库或者curl库,需要修改Makefile文件,增加-lneon或者-lcurl库,同时修改Macros.h文件。如果不想显示日志,注释掉Logging.h文件中的

#define DEBUG_MODE

即可,具体操作参考源代码。
点击下载

时间: 2024-12-22 10:13:53

利用Socket提交文件到web server的相关文章

安卓利用socket把文件分割多线程传输

问题描述 安卓利用socket把文件分割多线程传输 怎么把一个大文件分割成多份,多线程并发传输 然后服务器端可以并发接受 然后组装成原来的文件? 解决方案 没有人解答我的问题么

02-Twisted 构建 Web Server 的 Socket 长链接问题 | 07.杂项 | Python

02-Twisted 构建 Web Server 的 Socket 长链接问题 郑昀 201005 隶属于<07.杂项> 背景 利用几句简单代码可以构建一个 Web Server: from twisted.internet import reactor from twisted.web.server import Site from my_webhandler import * reactor.listenTCP(8080, Site(MyWebResource.setup())) 更复杂的

在silverlight中利用socket发送图片或文件

silverlight中的socket通讯支持,让sl开发基于web的聊天工具成为了可能,后来OpenFileDialog,SaveFileDialog的出现,更使得边聊天边传送图片(文件)得以实现,最新的SL4中又加入了摄像头支持,也许不久真的可以用silverlight开发出功能强大的视频聊天系统,目前唯一还没有解决的是p2p问题,根据sl3的sdk文档所述:    Socket 类为网络通信提供了一组方法和属性.Socket 类允许您使用 ProtocolType 枚举中所列出的任何一种通

通过asp入侵web server,窃取文件毁坏系统-ASP漏洞集

server|web    本文主要叙及有关ASP/iis的安全性问题及其相应对策,不提倡网友使用本文提及的方法进行任何破坏,否则带来的后果自负通过asp入侵Web server,窃取文件毁坏系统,  这决非耸人听闻...   iis的安全性问题   1.iis3/pws的漏洞   我实验过,win95+pws上运行ASP程序,只须在浏览器地 址栏内多加一个小数点ASP程序就会被下载下来.IIS3听说也有同样的问题,不过我没有试出来.   2.iis4的漏洞   iis4一个广为人知的漏洞是::

通过asp入侵web server,窃取文件毁坏

本文主要叙及有关asp/iis的安全性问题及其相应对策,不提倡网友使用本文提及的方法进行任何破坏,否则带来的后果自负 通过asp入侵web server,窃取文件毁坏系统,这决非耸人听闻... iis的安全性问题 1.iis3/pws的漏洞 我实验过,win95+pws上运行ASP程序,只须在浏览器地址栏内多加一个小数点ASP程序就会被下载下来.IIS3听说也有同样的问题,不过我没有试出来. 2.iis4的漏洞 iis4一个广为人知的漏洞是::$DATA,就是ASP的url后多加这几个字符后,代

通过asp入侵web server,窃取文件毁坏系统

本文主要叙及有关asp/iis的安全性问题及其相应对策,不提倡网友使用本文提及的方法进行任何破坏,否则带来的后果自负 通过asp入侵web server,窃取文件毁坏系统,这决非耸人听闻... iis的安全性问题 1.iis3/pws的漏洞我实验过,win95+pws上运行ASP程序,只须在浏览器地址栏内多加一个小数点ASP程序就会被下载下来.IIS3听说也有同样的问题,不过我没有试出来. 2.iis4的漏洞iis4一个广为人知的漏洞是::$DATA,就是ASP的url后多加这几个字符后,代码也

ASP Hack &amp;amp; Anti-Hack (通过asp入侵web server,窃取文件毁坏系统,这决非耸人听闻...)

server|web     ASP Hack & Anti-Hack         本文主要叙及有关asp/iis的安全性问题及其相应对策,不提倡网友使用本文提及的方法进行任何破坏,否则带来的后果自负     通过asp入侵web server,窃取文件毁坏系统,这决非耸人听闻...     iis的安全性问题    1.iis3/pws的漏洞    我实验过,win95+pws上运行ASP程序,只须在浏览器地址栏内多加一个小数点ASP程序就会被下载下来.IIS3听说也有同样的问题,不过我没

如何通过asp入侵web server,窃取文件毁坏系统

server|web 本文主要叙及有关asp/iis的安全性问题及其相应对策,不提倡网友使用本文提及的方法进行任何破坏,否则带来的后果自负 通过asp入侵web server,窃取文件毁坏系统,这决非耸人听闻... iis的安全性问题 1.iis3/pws的漏洞我实验过,win95+pws上运行ASP程序,只须在浏览器地址栏内多加一个小数点ASP程序就会被下载下来.IIS3听说也有同样的问题,不过我没有试出来. 2.iis4的漏洞iis4一个广为人知的漏洞是::$DATA,就是ASP的url后多

安全配置和维护Apache WEB Server

apache|server|web|安全 前言:在目前的Internet时代,主页已成为树立公司形象和展示自我天地的一个重要手段,配置一台强大且安全的Web Server就显得尤其重要.在众多的Web Server产品中,Apache是应用最为广泛的一个产品, 同时也是一个设计上非常安全的程序.但是,同其它应用程序一样,Apache也存在安全缺陷.本文将详细介绍如何正确配置和维护Apache WEB Server的安全性问题等. 一.Apache服务器的介绍 Apache服务器它是Interne