Foxtable(狐表)用户栏目专家坐堂 → 在上传文件到二进制列时,如何显示文件上传进度条呢?


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

主题:在上传文件到二进制列时,如何显示文件上传进度条呢?

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
在上传文件到二进制列时,如何显示文件上传进度条呢?  发帖心情 Post By:2021/1/18 0:47:00 [只看该作者]

在上传文件到二进制列时,如何显示文件上传进度条呢?

进度条窗体中  有一个进度条组件 和按钮
按钮代码:可以实现根据文件获取文件大小并刷新窗体中的进度条组件【怎么实现进度条到达完毕后,关闭进度条窗体呢?红色部分代码怎么完善?
Dim ifo As new FileInfo("D:\360极速浏览器下载\boneAnimation_v2.2.9_x64.exe")
Dim p As WinForm.ProgressBar
p = e.Form.Controls("ProgressBar1")
p.Maximum = ifo.Length'设置最大值
p.Minimum = 0 '设置最小值
p.Value = 0 '设置当前值
For i As Integer = 0 To ifo.Length - 1
    If i Mod 100 = 0 Then
        p.Value = i '当前值为已经完成的行数
    End If
Forms("进度条").Close()
Next

下面代码为列子中的二进制文件上传代码   怎么采用上面的代码来对应在上传文件的时候 弹出进度条窗体 并显示进度条呢?上传完毕后自动关闭进度条窗体。(红色部分……代码该怎么写呢?)
上传文件按钮代码:
IDim dlg As New OpenFileDialog
dlg.Filter = "图形文件|*.bmp;*.jpg;*.gif;*.png"
If dlg.ShowDialog =DialogResult.OK Then
    Dim fl As String = dlg.FileName
    Dim r As Row = Tables("员工.附件").AddNew()
    r("文件名") = FileSys.GetName(fl) '写入文件名
    r.Save '必须先保存
    r.DataRow.SQLInsertFile("附件",fl) '插入文件
……
Forms("进度条").show()
    r.DataRow.SQLSetValue("CRC值", CRCCheckFile(fl)) '保存crc检验值
End If




下面代码为列子中的二进制文件打开代码   怎么采用上面的代码来对应在下载文件的时候 弹出进度条窗体 并显示进度条呢?下载完毕后自动关闭进度条窗体。(红色部分……代码该怎么写呢?)
打开文件按钮代码:
If Tables("员工.附件").Current Is Nothing Then
    Return
End If
Dim dr As DataRow = Tables("员工.附件").Current.DataRow
Dim fl As String =  ProjectPath &  dr("文件名")
If FileSys.FileExists(fl) AndAlso CRCCheckFile(fl) = dr.SQLGetValue("CRC值") Then '如果本地存在同名文件且CRC校验值相同
    '则直接使用本地文件
Else '否则从数据库提取文件
……
Forms("进度条").show()
    If dr.SQLLoadFile("附件",fl) = False Then '如果提取文件失败
        Messagebox.Show("附件提取失败,可能并不存在附件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information)
        Return
    End If
End If
Dim Proc As New Process '打开文件
Proc.File = fl
Proc.Start()
[此贴子已经被作者于2021/1/18 0:58:09编辑过]

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


加好友 发短信
等级:超级版主 帖子:106028 积分:539233 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/18 8:41:00 [只看该作者]


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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)参考:http://www.foxtable.com/bbs/...  发帖心情 Post By:2021/1/18 10:18:00 [只看该作者]

参照列子  代码如下:
Dim dlg As New OpenFileDialog
dlg.Filter = "|*.*"
If dlg.ShowDialog =DialogResult.OK Then
    Dim fl As String = dlg.FileName
    Dim ifo As new FileInfo(fl)
    Dim sj As  Double
    Dim Multi As String = (ifo.Length)
    Dim Values() As String
    Values = Multi.split(".")
    sj=Values(0)
    'If sj > 1073741824 Then  '文件大于1gb
    If sj > 524288000 Then '文件大于500mb
        MessageBox.Show("文件"&  Format(Values(0)/1024/1024,"0.00") &"MB" &"过大,只能上传小于500MB的文件!","温馨提示")
    Else
        MessageBox.Show("文件"&  Format(Values(0)/1024/1024,"0.00") &"MB" &"小于500MB,支持上传!","温馨提示")
        Dim r As Row = Tables("员工.附件").AddNew()
        r("文件名") = FileSys.GetName(fl) '写入文件名
        r.Save '必须先保存
        r.DataRow.SQLInsertFile("附件",fl) '插入文件
        WaitShow()  '打开
        
        '耗时操作
        For i As Integer = 0 To sj
            Output.Show(i)
        Next
        
        WaitClose()  '关闭
        r.DataRow.SQLSetValue("CRC值", CRCCheckFile(fl)) '保存crc检验值
    End If
End If

红色部分没有起到作用    如果将SJ换成列子中的10000  且直接命令窗口红色部分可以运行
麻烦老师看看  红色部分怎么没有根据文件上传进度进行对应的进度条图片显示呢?

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


加好友 发短信
等级:超级版主 帖子:106028 积分:539233 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/18 10:22:00 [只看该作者]

        WaitShow()  '打开
        
        '耗时操作
        r.DataRow.SQLInsertFile("附件",fl) '插入文件
        
        WaitClose()  '关闭

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)        WaitSh...  发帖心情 Post By:2021/1/18 10:32:00 [只看该作者]

OK  谢谢老师   是不是同理  其他如果上传或者操作需要等待很久的时候  我就对应的吧需要长时间等待运行的代码放在这个里面

WaitShow()  '打开        
        '耗时操作
        需要长时间耗时操作的代码
WaitClose()  '关闭

有没有办法实现百分之几的进度呢?这样会更加直观一些

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


加好友 发短信
等级:超级版主 帖子:106028 积分:539233 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/1/18 10:37:00 [只看该作者]

没有办法,SQLInsertFile是一个原子操作,基于不同的文件大小、网络状态、内存使用状态,数据库状态,都有可能产生不同的处理时间。只能是显示一个gif图片表示正在处理中,

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


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)没有办法,SQLInsertFile是一个原子操...  发帖心情 Post By:2021/1/18 11:04:00 [只看该作者]

好的 谢谢老师耐心的指导和解答

 回到顶部