以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  请问AddressOf这个回调指针,怎么使用?我现在用阿里云oss上传文件,想上传时显示进度条,里面有这个东西,实在看不懂  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=132407)

--  作者:chen37280600
--  发布时间:2019/3/21 10:50:00
--  请问AddressOf这个回调指针,怎么使用?我现在用阿里云oss上传文件,想上传时显示进度条,里面有这个东西,实在看不懂
进度条的.net帮助文档:https://help.aliyun.com/document_detail/91759.html?spm=a2c4g.11186623.6.921.12021bd4UpjLJM
阿里云oss的.net sdk下载:http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/32085/cn_zh/1515493045734/aliyun_oss_dotnet_sdk_2_8_0.zip?spm=a2c4g.11186623.2.10.2a7d4144HLORgn&file=aliyun_oss_dotnet_sdk_2_8_0.zip

我这边用sdk配合我的id,成功发送文件了

Dim endpoint As String = "https://oss-cn-shenzhen.aliyuncs.com" \'阿里云oss深圳地域

以下内容只有回复后才可以浏览

Dim bucketName As String ="mbldt" \'存储空间的名称
Dim LocalPath As String = "c:/123.jpg" \'设置上传的文件的本地路径
Dim  UpLoadPath As String = "demo/321.jpg" \'上传后的文件路径
Dim client As New Aliyun.OSS.OssClient(endpoint, accessKeyId, accessKeySecret) \'根据SDK创建阿里云oss对象

Try    
    client.PutObject(bucketName, UpLoadPath , LocalPath) \'执行上传
    messagebox.show("上传成功" )
Catch ex As Exception
    messagebox.show("上传失败,原因" & ex.Message)
End Try


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

--------------
想在上述代码里,加入进度条功能,可以让用户看到上传进度,请问怎么改?




[此贴子已经被作者于2019/3/21 10:54:20编辑过]

--  作者:有点蓝
--  发布时间:2019/3/21 11:04:00
--  
帮助搜“AddressOf”

streamProgressCallback方法参考Button1_Click用法放到全局代码
--  作者:chen37280600
--  发布时间:2019/3/21 11:16:00
--  
        Sub PutObjectProgress(ByVal bucketName As String)
            Const key As String = "PutObjectProgress"

            Try

                Using fs = File.Open(fileToUpload, FileMode.Open)
                    Dim putObjectRequest = New PutObjectRequest(bucketName, key, fs)
                    putObjectRequest.StreamTransferProgress += AddressOf streamProgressCallback
                    client.PutObject(putObjectRequest)
                End Using

                Console.WriteLine("Put object:{0} succeeded", key)
            Catch ex As OssException
                Console.WriteLine("Failed with error code: {0}; Error info: {1}. " & vbLf & "RequestID:{2}" & vbTab & "HostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId)
            Catch ex As Exception
                Console.WriteLine("Failed with error info: {0}", ex.Message)
            End Try
        End Sub




        Private Sub streamProgressCallback(ByVal sender As Object, ByVal args As StreamTransferProgressArgs)
            Console.WriteLine("ProgressCallback - TotalBytes:{0}, TransferredBytes:{1}, IncrementTransferred:{2}", args.TotalBytes, args.TransferredBytes, args.IncrementTransferred)
        End Sub

主要是这2段代码,不是很懂怎么转换,可以指导一下吗?
[此贴子已经被作者于2019/3/21 11:22:22编辑过]

--  作者:有点蓝
--  发布时间:2019/3/21 11:54:00
--  
放到全局事件

public Sub streamProgressCallback(ByVal sender As Object, ByVal args As StreamTransferProgressArgs)
            Console.WriteLine("ProgressCallback - TotalBytes:{0}, TransferredBytes:{1}, IncrementTransferred:{2}", args.TotalBytes, args.TransferredBytes, args.IncrementTransferred)
        End Sub

其它代码自己到这里转:http://converter.telerik.com/

AddHandler putObjectRequest.StreamTransferProgressAddressOf streamProgressCallback

--  作者:chen37280600
--  发布时间:2019/3/21 15:43:00
--  
它提示这段话里的“ public Sub streamProgressCallback(ByVal sender As Object, ByVal args As StreamTransferProgressArgs)  ”  的StreamTransferProgressArgs 不存在,没有定义。但是我看整个sample案例,也没怎么看到有这个参数,不知道是怎么来,怎么可以找到
[此贴子已经被作者于2019/3/21 15:43:02编辑过]

--  作者:有点甜
--  发布时间:2019/3/21 15:56:00
--  

StreamTransferProgressArgs

 

改成

 

Aliyun.OSS.Common.StreamTransferProgressArgs

 

或者

 

Aliyun.OSS.StreamTransferProgressArgs


--  作者:chen37280600
--  发布时间:2019/3/21 16:29:00
--  
全局代码定义好了,但是不知道怎么把监听挂钩上去上传事件

Dim endpoint As String = "http://oss-cn-shenzhen.aliyuncs.com" \'阿里云oss深圳地域
Dim accessKeyId As String = "LTAInxxxmNxxxxUBg"
Dim accessKeySecret As String = "8EjqqYxxxxxxxxY5en1Irl8vHmSj"
Dim bucketName As String ="mbldt" \'存储空间的名称
Dim LocalPath As String = "c:/123.jpg" \'设置上传的文件的本地路径
Dim  UpLoadPath As String = "demo/321.jpg" \'上传后的文件路径
Dim client As New Aliyun.OSS.OssClient(endpoint, accessKeyId, accessKeySecret) \'根据SDK创建阿里云oss对象


Try
    
    Dim fs As System.IO.FileStream = System.IO.File.Open(LocalPath, System.IO.FileMode.Open)
    Dim putObjectRequest = New Aliyun.oss.PutObjectRequest(bucketName, UpLoadPath , fs)
    AddHandler putObjectRequest.StreamTransferProgress, AddressOf streamProgressCallback ‘感觉应该放窗口的afterload,但是不知道怎么放
    client.PutObject(putObjectRequest)
    \'client.PutObject(bucketName, UpLoadPath , LocalPath) \'执行上传
    messagebox.show("上传成功" )
Catch ex As Exception
    messagebox.show("上传失败,原因" & ex.Message)
End Try
[此贴子已经被作者于2019/3/21 16:48:02编辑过]

--  作者:有点甜
--  发布时间:2019/3/21 16:54:00
--  

在全局代码写代码啊。每上传一点,就会触发一次事件的啊,你在里面写进度条的代码就行啊。

 

比如

 

msgbox(CExp("ProgressCallback - TotalBytes:{0}, TransferredBytes:{1}, IncrementTransferred:{2}", args.TotalBytes, args.TransferredBytes, args.IncrementTransferred))

 

或者

 

output.show(CExp("ProgressCallback - TotalBytes:{0}, TransferredBytes:{1}, IncrementTransferred:{2}", args.TotalBytes, args.TransferredBytes, args.IncrementTransferred))


--  作者:chen37280600
--  发布时间:2019/3/21 17:01:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看

--  作者:有点甜
--  发布时间:2019/3/21 17:04:00
--  

在上传的时候,绑定事件啊

 

AddHandler putObjectRequest.StreamTransferProgress, AddressOf streamProgressCallback