以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 请问AddressOf这个回调指针,怎么使用?我现在用阿里云oss上传文件,想上传时显示进度条,里面有这个东西,实在看不懂 (http://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 -------------- 想在上述代码里,加入进度条功能,可以让用户看到上传进度,请问怎么改? [此贴子已经被作者于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.StreamTransferProgress, AddressOf 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 -- ![]() ![]() |
-- 作者:有点甜 -- 发布时间:2019/3/21 17:04:00 -- 在上传的时候,绑定事件啊
AddHandler putObjectRequest.StreamTransferProgress, AddressOf streamProgressCallback |