UpFile

一、准备工作:首先在云端代码上添加事件 _upfile() 并启动。

1
2
3
4
5
6
7
bool _upfile(string&in from, string&out msg)
{
    Print("_upfile, from:"+from+"\n");
   
    msg = "this is upfile return msg";
    return true;
}

二、Windows客户端执行以下代码:
在头文件定义消息宏和消息函数(如果不需要接收进度消息则不定义):

1
2
#define WM_USER_MSG_UP_FILE     WM_USER + 1000  // 文件上传进度消息
afx_msg LRESULT OnMsgUpFile(WPARAM w,LPARAM l); // 消息函数
1
2
3
4
//进行消息映射
BEGIN_MESSAGE_MAP(CdemoDlg, CDialogEx)
    ON_MESSAGE(WM_USER_MSG_UP_FILE,&CdemoDlg::OnMsgUpFile) // 上传进度消息
END_MESSAGE_MAP()

接收消息的函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
LRESULT CdemoDlg::OnMsgUpFile(WPARAM w,LPARAM l)
{
    std::string* strMsg = (std::string*)l;
    Json::Value root;
    Json::Reader r;
    if(r.parse(*strMsg,root))
    {
        char tmp[256] = {0};
        double dPercent = root["task_percent"].asDouble();
        m_progressUp.SetPos(dPercent);

        // 设置标签百分率
        sprintf(tmp,"%0.2lf %%",dPercent);
        CString strPercent = CStrWorker::CharToCString(tmp);
        m_staticUp.SetWindowText(strPercent);
    }

    return TRUE;
}

上传代码:

1
2
3
4
5
6
7
8
CString strFilePath = L"c:\\1.jpg", strSaveFilePath = L"1.jpg", strTaskToken = L"my_up_file";
BOOL bExistFail = TRUE, bSendApp = TRUE;
std::wstring out_res = "";
BOOL b = m_client.UpFileW(strFilePath,strSaveFilePath,strTaskToken,bExistFail,bSendApp,&out_res,this,WM_USER_MSG_UP_FILE);
if(b)
    AfxMessageBox(L"上传成功");
else
    AfxMessageBox(L"上传失败");

三、Linux客户端执行以下代码:
定义接收上传进度消息的函数:

1
2
3
4
void RecvUpFileMsg(const char* buff, int len)
{
    tprintf("接收到上传进度消息:%s\n",buff);
}

上传代码:

1
2
3
4
5
6
7
std::string strLocalPath = "/tmp/1.jpg", strSerFileName = "1.jpg",strTaskToken = "my_up_file";
std::string out_res = "";
bool b = m_client.UpFile(strLocalPath.c_str(),strSerFileName.c_str(),strTaskToken.c_str(),true,true,&out_res,RecvUpFileMsg);
if(!b)
    printf("client 上传文件失败, err:%s\n",m_client.GetLastError().c_str());
else
    printf("client 上传文件成功, 返回数据:%s\n",out_res.c_str());

四、Android客户端执行以下代码:
继承并注册消息接收器(客户端收到的所有消息都在消息接收器这里处理, 只需要注册1次, 后者覆盖前者):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// 消息接收器代码(需要导入jar包和so)
import com.bovey.android.MsgRecver;

public class MyMsgRecver extends MsgRecver{
    @Override
    public void RecvMsg(String msg) {
        // TODO Auto-generated method stub
        super.RecvMsg(msg);
       
        Log.v("my recv msg", "msg:"+msg);
    }

    @Override
    public void RecvUpMsg(String msg) {
        // TODO Auto-generated method stub
        super.RecvUpMsg(msg);
       
        Log.v("my recv up msg", "msg:"+msg);
    }

    @Override
    public void RecvDownMsg(String msg) {
        // TODO Auto-generated method stub
        super.RecvDownMsg(msg);
       
        Log.v("my recv down msg", "msg:"+msg);
    }
}
1
2
3
4
5
6
7
// 注册代码
MyMsgRecver m_msgRecver = new MyMsgRecver();
boolean b = m_client.RegRecver(m_msgRecver);
if(b)
    Log.i("reg ok", "recv:"+out_str.toString());
else
    Log.e("reg fail", "err:"+m_client.GetLastError());

上传代码:

1
2
3
4
5
6
7
8
9
String strLocalPath = Environment.getExternalStorageDirectory().getPath() + "/1.jpg";
String strServerName = "1.jpg";
String strTaskToken = "my_up_task";
CString out_res = new CString();
boolean b = m_client.UpFile(strLocalPath, strServerName, strTaskToken, true, true, out_res);
if(b)
    Log.i("up file ok", "recv:"+out_str.toString());
else
    Log.e("up file fail", "err:"+m_client.GetLastError());

至此,文件上传完成,感谢您的查阅,希望可以帮到您。

发表评论

电子邮件地址不会被公开。 必填项已用*标注