文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>新颖网络文件上传插件开发文档For VC6

新颖网络文件上传插件开发文档For VC6

时间:2010-09-05  来源:XproerStorage

 

版权所有 2009-2010 北京新颖网络

保留所有权利

官方网站:http://www.ncmem.com

官方博客:http://www.cnblogs.com/xproer

产品论坛:http://www.5gzl.com/bbs/

联系邮箱:[email protected]

Visual Studio 6.0示例下载:http://www.ncmem.com/download/FileUploaderDemoVC6.rar

联系QQ:1085617561

 

1.      C++包装对象

1.1.   FileUploaderImpl类

类型:C++

头文件:FileUploaderImpl.h

说明:文件上传对象的包装类,用户在实际的项目中只需要创建FileUploaderImpl对象,然后通过FileUploader对象就可以进行文件上传操作。

 

方法

 

名称

说明

Post

开始上传文件

SetUserName

设置FTP用户名

SetUserPass

设置FTP用户密码

Stop

停止上传文件

 

Post方法

开始上传文件。

说明:此函数将会自动实现断点续传功能。如果当前任务文件只上传了一半,则在下次开始时FileUploader组件将会自动定位到上次上传的位置继续上传数据。

Stop方法

停止上传任务。

SetUserName方法

设置FTP用户名称。

 

SetUserPass方法

设置FTP用户密码。

this->m_Uploader.SetUserName("test");

创建FileUploaderImpl示例

FileUploaderImpl m_Uploader;//上传对象

GUID clsid;

HRESULT hr = ::CLSIDFromProgID(L"XproerWebPlug.FileUploader.1",&clsid);

if ( SUCCEEDED(hr) ) hr = this->m_Uploader.CreateDispatch(clsid);

 

1.2.   FileUploaderEventImpl类

类型:C++

头文件:FileUploaderEventImpl.h

文件上传组件事件包装类。

 

事件

TransferComplete事件

文件上传完毕。

语法:

STDMETHOD(TransferComplete)(ULONG taskID);

参数:

taskID   任务唯一标识。

 

TransferConnected事件

服务器连接成功事件。

语法:

STDMETHOD(TransferConnected)(ULONG taskID);

参数:

taskID   任务唯一标识。

 

TransferConnectedError事件

服务器连接失败事件。

语法:

STDMETHOD(TransferConnectedError)(ULONG taskID);

参数:

TransferData事件

数据上传事件。每上传成功指定长度的数据将会触发此事件。

语法:

STDMETHOD(TransferData)(ULONG taskID, BSTR speed,  BSTR postedLength,  BSTR percent,  BSTR time);

参数:

TransferError事件

数据上传失败事件。

语法:

STDMETHOD(TransferError)(ULONG taskID, ULONG errCode);

参数:

taskID   任务的唯一标识。

errCode  错误码

class FileUploaderError

{

public:

     enum V

     {

         Unknow = 0,//未知错误

         LocalFileEmpty=1,//本地文件名为空

         RemoteFileEmpty=2,//远程文件为空

         IpEmpty=3,//IP为空

         UserNameEmpty=4,//用户名为空

         UserPassEmpty=5,//密码为空

         ConnectServer=6,//连接服务器失败

         UserNamePass=7,//用户名密码错误

         OpenFileFailed=8,//打开文件失败

         PostDataFailed=9,//传输数据失败

         LocalFileSize1G=10,//超出指定文件大小

         UnRecover=11,

         RemoteFolderFail=12,//远程文件夹错误

         RemoteHasFile=13,//服务器已存在此文件

         UploaderFolder=14,//上传路径错误

         ServerTimeOut=15//服务器超时

     };

};

TransferStop事件

文件上传停止事件。

语法:

STDMETHOD(TransferStop)(ULONG taskID);

参数:

taskID   任务唯一标识。

 

连接COM事件示例

GUID clsid;

HRESULT hr = ::CLSIDFromProgID(L"XproerWebPlug.FileUploader.1",&clsid);

if ( SUCCEEDED(hr) ) hr = this->m_Uploader.CreateDispatch(clsid);

LPDISPATCH disp = this->m_Uploader;

if ( SUCCEEDED(hr) ) hr = disp->QueryInterface(IID_IFileUploader,(void**)&this->m_IUpload);

 

if( SUCCEEDED(hr) )

{

     this->m_UploaderEventImpl.DispEventAdvise(this->m_IUpload);//连接上传事件

     this->m_UploaderEventImpl.Reciver = this;//连接逻辑事件

}

 

 

1.3.   FileTransferEvent类

类型:C++

头文件:FileTranserEvent.h

说明:事件接口。如果客户端需要处理文件上传和下载组件的事件则需要实现此类的虚函数。

 

方法

OnFileTransferComplete方法

文件传输完毕方法。

语法:

virtual void OnFileTransferComplete( ULONG taskID) = 0;

OnFileTransferError方法

文件传输错误。

语法:

virtual void OnFileTransferError( ULONG taskID, ULONG errCode) = 0;

OnFileTransferStop方法

文件传输停止

语法:

virtual void OnFileTransferStop( ULONG taskID) = 0;

OnFileTransferData方法

文件数据传输成功。

语法:

virtual void OnFileTransferData( ULONG taskID, BSTR speed,  BSTR postedLength,  BSTR percent,  BSTR time) = 0;

OnFileTransferConnected方法

服务器连接成功。

语法:

virtual void OnFileTransferConnected( ULONG taskID) = 0;

OnFileTransferConnectedError方法

服务器连接失败。

语法:

virtual void OnFileTransferConnectedError( ULONG taskID) = 0;

 

 

1.4.   FileDownloaderImpl类

类型:C++

头文件:FileDownloaderImpl.h

说明:文件下载组件包装类。

 

1.5.   FileDownloaderEventImpl类

类型:C++

头文件:FileDownloaderEventImpl.h

说明:文件下载组件事件包装类。

 

 

2.      COM组件

2.1.   XproerWebPlug.FileUploader组件

类型:COM

CLSID:E7BAAB0A-C304-45A6-8065-FA648A9B2EC3

ProgID:XproerWebPlug.FileUploader.1

说明:文件上传组件。提供文件断点续传,超大文件上传功能。

 

2.2.   XproerWebPlug.FileDownloader组件

类型:COM

CLSID:4FAF81E6-6B52-44E9-BE02-4FC2976F4FC4

ProgID:XproerWebPlug.FileDownloader.1

说明:文件下载组件。提供文件断续续传,超大文件下载功能。

 

3.      在项目中使用文件上传组件

示例下载:

 

3.1.   步骤

1.      注册新颖网络文件上传组件。

2.      初始化COM环境。

3.      添加头文件。

4.      添加变量。

5.      创建COM组件,并连接事件。

6.      关闭应用程序时断开事件。

 

注册新颖网络文件上传组件。

注册命令

regsvr32 FileUploader.dll

 

初始化COM环境

使用ATL前必须包含以下头文件:atlbase.h和atlcom.h,并且定义_Module变量[2]。把以下代码加到 stdafx.h:

#include <atlbase.h>

extern CComModule _Module;

#include <atlcom.h>

在 Project.cpp 文件中要对 _Module 进行定义。如下:

CDemoApp::CDemoApp()

{

     // TODO: add construction code here,

     // Place all significant initialization in InitInstance

}

 

/////////////////////////////////////////////////////////////////////////////

// The one and only CDemoApp object

 

CDemoApp theApp;

CComModule _Module;//添加对 _Module 的定义

/////////////////////////////////////////////////////////////////////////////

// CDemoApp initialization

 

BOOL CDemoApp::InitInstance()

{}

 

修改InitInstance()函数

BOOL CDemoApp::InitInstance()

{

     AfxEnableControlContainer();

 

     _Module.Init(NULL, (HINSTANCE)GetModuleHandle(NULL));//初始化COM环境

     ::CoInitialize(NULL);//初始化COM

     // Standard initialization

     // If you are not using these features and wish to reduce the size

     //  of your final executable, you should remove from the following

     //  the specific initialization routines you do not need.

 

#ifdef _AFXDLL

     Enable3dControls();              // Call this when using MFC in a shared DLL

#else

     Enable3dControlsStatic();   // Call this when linking to MFC statically

#endif

 

     CDemoDlg dlg;

     m_pMainWnd = &dlg;

     int nResponse = dlg.DoModal();

     if (nResponse == IDOK)

     {

         // TODO: Place code here to handle when the dialog is

         //  dismissed with OK

     }

     else if (nResponse == IDCANCEL)

     {

         // TODO: Place code here to handle when the dialog is

         //  dismissed with Cancel

     }

 

     // Since the dialog has been closed, return FALSE so that we exit the

     //  application, rather than start the application's message pump.

     return FALSE;

}

 

修改ExitInstance()函数

int CDemoApp::ExitInstance()

{

     ::CoUninitialize();

     _Module.Term();

    

     return CWinApp::ExitInstance();

}

 

添加头文件

#include "com/FileUploaderImpl.h"

#include "com/FileDownloaderImpl.h"

#include "com/FileUploaderEventImpl.h"

#include "com/FileDownloaderEventImpl.h"

#include "com/FileTransferEvent.h"

 

建议:将C++包装类文件放在com文件夹中,这样便于项目管理。

 

添加COM变量

FileUploaderImpl m_Uploader;//上传对象

FileDownloaderImpl m_Downloader;//下载对象

FileUploaderEventImpl m_UploaderEventImpl;//上传事件接收器

FileDownloaderEventImpl m_DownloaderEventImpl;//下载事件接收器

IFileUploader* m_IUpload;//上传接口

IFileDownloader* m_IDownloader;//下载接口

 

创建COM组件,并连接事件

//创建上传组件

GUID clsid;

HRESULT hr = ::CLSIDFromProgID(L"XproerWebPlug.FileUploader.1",&clsid);

if ( SUCCEEDED(hr) ) hr = this->m_Uploader.CreateDispatch(clsid);

LPDISPATCH disp = this->m_Uploader;

if ( SUCCEEDED(hr) ) hr = disp->QueryInterface(IID_IFileUploader,(void**)&this->m_IUpload);

if( SUCCEEDED(hr) )

{

     this->m_UploaderEventImpl.DispEventAdvise(this->m_IUpload);//连接上传事件

     this->m_UploaderEventImpl.Reciver = this;//连接逻辑事件

}

 

//创建下载组件

hr = ::CLSIDFromProgID(L"XproerWebPlug.FileDownloader.1",&clsid);

if (SUCCEEDED(hr)) hr = this->m_Downloader.CreateDispatch(clsid);

disp = this->m_Downloader;

if ( SUCCEEDED(hr) ) hr = disp->QueryInterface(IID_IFileDownloader,(void**)&this->m_IDownloader);

if ( SUCCEEDED(hr) )

{       

     this->m_DownloaderEventImpl.DispEventAdvise(this->m_IDownloader);//连接下载事件

     this->m_DownloaderEventImpl.Reciver = this;//连接逻辑事件

}

 

关闭应用程序时断开事件

在应用程序退出时必须要断开COM事件,否则应用程序将会出现错误无法正常退出。

 

void CDemoDlg::OnDestroy()

{

     CDialog::OnDestroy();

    

     if (this->m_IUpload)

     {

         this->m_UploaderEventImpl.DispEventUnadvise(this->m_IUpload);//取消事件

     }

     if (this->m_IDownloader)

     {

         this->m_DownloaderEventImpl.DispEventUnadvise(this->m_IDownloader);//取消下载事件

     }

}

 

 

 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载