Foxtable(狐表)用户栏目专家坐堂 → 请问AddressOf这个回调指针,怎么使用?我现在用阿里云oss上传文件,想上传时显示进度条,里面有这个东西,实在看不懂


  共有3646人关注过本帖树形打印复制链接

主题:请问AddressOf这个回调指针,怎么使用?我现在用阿里云oss上传文件,想上传时显示进度条,里面有这个东西,实在看不懂

帅哥哟,离线,有人找我吗?
chen37280600
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1265 积分:7844 威望:0 精华:4 注册:2017/12/31 14:53:00
请问AddressOf这个回调指针,怎么使用?我现在用阿里云oss上传文件,想上传时显示进度条,里面有这个东西,实在看不懂  发帖心情 Post By:2019/3/21 10:50:00 [显示全部帖子]

进度条的.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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1265 积分:7844 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1265 积分:7844 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1265 积分:7844 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1265 积分:7844 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/3/21 17:01:00 [显示全部帖子]


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

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1265 积分:7844 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/3/21 17:07:00 [显示全部帖子]


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

麻烦版主研究一下,这个放在那里,基本上文件收发的功能就齐全了
[此贴子已经被作者于2019/3/21 17:42:32编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1265 积分:7844 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/3/21 19:18:00 [显示全部帖子]

一样报错


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


 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1265 积分:7844 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/3/22 17:35:00 [显示全部帖子]

上产问题已经完美解决,现在折腾下载的,我发现它要用流的方法下载,不是很懂这个代码怎么转换成狐表里使用
参考SDK文档:https://help.aliyun.com/document_detail/91748.html?spm=a2c4g.11186623.6.918.5a726927v0LA4F
参考SDK C#代码:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:getobjectsample.txt



Imports System
Imports System.IO
Imports System.Text
Imports System.Threading
Imports System.Security.Cryptography
Imports Aliyun.OSS.Common


            Try
                Dim result = client.GetObject(bucketName, key) ' bucketName是空间名称,key是服务器里的文件存储路径

                Using requestStream = result.Content

                    Using fs = File.Open("d:/123.rar", FileMode.OpenOrCreate) '下载到d:/123.rar ,这几段红色的玩意,不知道怎么转狐表
                        Dim length As Integer = 4 * 1024
                        Dim buf = New Byte(length - 1) {}

                        Do
                            length = requestStream.Read(buf, 0, length)
                            fs.Write(buf, 0, length)
                        Loop While length <> 0
                    End Using
                End Using

                Console.WriteLine("Get object succeeded")
            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
[此贴子已经被作者于2019/3/22 17:37:50编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1265 积分:7844 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2019/3/22 21:09:00 [显示全部帖子]

我是想问,红色那段,怎么转换用?前后那些引用我基本都懂。这个流的转换读取,就不懂了

 回到顶部