AnyChat技术支持论坛

标题: 关于文件传送回调函数 [打印本页]

作者: cg0071    时间: 2013-11-29 14:47
标题: 关于文件传送回调函数
用户101给102传递文件

101控制台打印
BRAC_TransFile(102, realPath,1,2,0);
AddLog("realPath="+realPath);
============realPath=D:\测试\测试.txt

102回调函数被触发,打印
function OnAnyChatTransFile(dwUserId, lpFileName, lpTempFilePath, dwFileLength, wParam, lParam, dwTaskId) {

     AddLog("lpTempFilePath="+lpTempFilePath);
}
============lpTempFilePath=D:\PROGRA~1\BAIRUI~1\ANYCHA~1\temp\测试.txt

传送的路径和接收到的路径不一样?
传过去的文件是直接保存在对方的路径下面了吗?还是传的是一组数据流?我如何把对方传的文件保存到任意位置?

作者: 廖斌    时间: 2013-11-29 15:03
您好。发送路径是指发送源文件路径,回调中触发的路径是接收路径。接收路径要在接收文件之前设置,设置之后回调中就是这个路径,你可以根据这个路径将文件保存到其他地方
作者: cg0071    时间: 2013-11-29 15:50
廖斌 发表于 2013-11-29 15:03
您好。发送路径是指发送源文件路径,回调中触发的路径是接收路径。接收路径要在接收文件之前设置,设置之后 ...

您好,能详细解说一下吗?
我把路径在全局变量设置了一下,结果还是1楼说的那样
var lpTempFilePath = "D:\\测试\\";
function OnAnyChatTransFile(dwUserId, lpFileName, lpTempFilePath, dwFileLength, wParam, lParam, dwTaskId) {
     AddLog("lpTempFilePath="+lpTempFilePath);
}
接收方打印的路径还是D:\PROGRA~1\BAIRUI~1\ANYCHA~1\temp\测试.txt

这个是把文件自动保存到lpTempFilePath这个路径吗?开发手册上说意思是自动保存,但是木有
作者: 廖斌    时间: 2013-11-29 16:07
cg0071 发表于 2013-11-29 15:50
您好,能详细解说一下吗?
我把路径在全局变量设置了一下,结果还是1楼说的那样
var lpTempFilePath =  ...

您好。
var lpTempFilePath = "D:\\测试\\";
不是这样设置的哦。可以在初始化sdk完成之后设置BRAC_SetSDKOption(BRAC_SO_CORESDK_TMPDIR,"d:\\test");
作者: adminivt    时间: 2013-11-29 17:35
你的完整路径是怎么获得的?
作者: cg0071    时间: 2013-12-2 13:47
adminivt 发表于 2013-11-29 17:35
你的完整路径是怎么获得的?

你指的是发送方选择本地文件的路径?

这个用的是input标签type="file"来获取的,只有ie可以,火狐、chrome都不行(浏览器给加密禁用了)

在这里想问问论坛的前辈们:

你们开发的这个传送文件函数,需要填写本地文件的路径,前提是怎么考虑来获取本地文件的路径的(只考虑Windows系统)?我暂时只想到用input标签来获取……
作者: admin    时间: 2013-12-2 14:04
您好,在AnyChat for Web SDK中,API:BRAC_TransFile的参数filepath可以为空,内核将自动弹出文件选择窗口,不需要浏览器弹出,可适应IE、Firefox、Chrome等其它浏览器。

参考:http://bbs.anychat.cn/forum.php? ... &extra=page%3D1
作者: cg0071    时间: 2013-12-2 15:56
本帖最后由 cg0071 于 2013-12-2 16:22 编辑
admin 发表于 2013-12-2 14:04
您好,在AnyChat for Web SDK中,API:BRAC_TransFile的参数filepath可以为空,内核将自动弹出文件选择窗口 ...

更新web插件后,确实可以了,但是发送方发送后,对方的回调函数木有触发了(此时对方不在线),
1.  是不是要求对方必须在线?但是var transFileId = BRAC_TransFile(102, "",1,2,0);之后再查询进度的时候返回5(接收方取消任务),但是这个不能说明是离线还是取消了?
2.  发送方发送文件后(100M的),BRAC_QueryTransTaskInfo(mSelfUserId,transFileId,BRAC_TRANSTASK_STATUS); 首次返回一个2(正在传输),那么传送完成后会不会自动再触发一次查询的?还是要我自己不停的检测是否发送完成?
3.  接收方如何查询传输进度等信息?


作者: admin    时间: 2013-12-2 16:29
您好:
1、需要双方都在线,传输才能正常的进行;
2、你可以启动一个定时器,比如500ms,定期的来查询传输进度、状态等;
作者: cg0071    时间: 2013-12-2 17:09
admin 发表于 2013-12-2 16:29
您好:
1、需要双方都在线,传输才能正常的进行;
2、你可以启动一个定时器,比如500ms,定期的来查询传 ...

谢谢,第三点怎么实现?接收方如何查看传输进度?比如类似QQ的那种效果。
再加一点:
4. 可不可做一个在线截图功能,发送后,房间内的人都能看到,跟聊天记录一样的效果
作者: admin    时间: 2013-12-2 17:20
您好,接收方也可以查询进度的,您可以通过透明通道将userid、taskid传给对方,对方就可以利用这两个参数进行查询了。
作者: cg0071    时间: 2013-12-3 16:53
admin 发表于 2013-12-2 17:20
您好,接收方也可以查询进度的,您可以通过透明通道将userid、taskid传给对方,对方就可以利用这两个参数进 ...

您好,今天实验了一下,接收方查询不到发送方传送进度,结果如下
var returnVal = BRAC_QueryTransTaskInfo(personId,transFileId,BRAC_TRANSTASK_STATUS));
personId是通过透明通道传给接收方的发送人id
transFileId是任务id(在不同人的机器上存放着)
但是上面的函数返回值是0,不是应该有1,2,3,4,5吗?怎么会是0?

作者: 廖斌    时间: 2013-12-3 17:12
cg0071 发表于 2013-12-3 16:53
您好,今天实验了一下,接收方查询不到发送方传送进度,结果如下
var returnVal = BRAC_QueryTransTaskI ...

自己发送,自己查询呢,查到的结果是正常的吗?
作者: cg0071    时间: 2013-12-3 17:22
廖斌 发表于 2013-12-3 17:12
自己发送,自己查询呢,查到的结果是正常的吗?
自己发送自己查询正常,现在问的是接收方的问题


var returnVal = BRAC_QueryTransTaskInfo(personId,transFileId,BRAC_TRANSTASK_STATUS);
这个函数在接收方一直返回为0,ok这个代表成功的意思
但是这个查询进度函数BRAC_QueryTransTaskInfo(personId,transFileId,BRAC_TRANSTASK_PROGRESS)
在接收方也是一直返回为0,这个不是应该返回0~100 或 0.0~100.0吗?
作者: 廖斌    时间: 2013-12-3 17:27
cg0071 发表于 2013-12-3 17:22
自己发送自己查询正常,现在问的是接收方的问题

将personId和transFileId输出一下,看是否正常。我们这边也检查下看看
作者: cg0071    时间: 2013-12-3 17:28
本帖最后由 cg0071 于 2013-12-3 17:29 编辑
廖斌 发表于 2013-12-3 17:27
将personId和transFileId输出一下,看是否正常。我们这边也检查下看看

正常,都能输出
_______接收者personId:105
_______接收者transFileId:20924
----进度:0
----进度:0
----进度:0定时器中返回的值都是0

作者: 廖斌    时间: 2013-12-3 18:23
cg0071 发表于 2013-12-3 17:28
正常,都能输出
_______接收者personId:105
_______接收者transFileId:20924

您好,我们这边测试接收方查询BRAC_TRANSTASK_STATUS正常。第一个参数要是任务发起者的userid,请检查下
作者: cg0071    时间: 2013-12-4 09:45
廖斌 发表于 2013-12-3 18:23
您好,我们这边测试接收方查询BRAC_TRANSTASK_STATUS正常。第一个参数要是任务发起者的userid,请检查下

BRAC_TRANSTASK_STATUS
这个是查询状态的,14楼您说了,是正常的,返回值为0,这个OK

但是我问的是查询进度的BRAC_TRANSTASK_PROGRESS
这个进度返回的也是0,定时器中每次返回打印的都是0,这个也代表成功的意思?
这个不是应该是0~100之间吗?
那我接收方如何查看文件传送的进度?
类似qq那样,两边都能看到发送(接收)了多少

我的插件是web版最新的

以上问题针对接收方
作者: 廖斌    时间: 2013-12-4 10:25
cg0071 发表于 2013-12-4 09:45
BRAC_TRANSTASK_STATUS
这个是查询状态的,14楼您说了,是正常的,返回值为0,这个OK
BRAC_TRANSTASK_STATUS
这个是查询状态的,14楼您说了,是正常的,返回值为0,这个OK

不对哦,这个返回值如果查询正常的话应该是1-5。我们自己有测试过,针对接收方,是可以查出发送状态的。检查下函数的第一个参数,值要为任务发起者的userid,而不是接收方的userid




欢迎光临 AnyChat技术支持论坛 (http://bbs.anychat.cn/) Powered by Discuz! X3