Foxtable(狐表)用户栏目专家坐堂 → 二进制列 怎么实现web上传图片呢?


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

主题:二进制列 怎么实现web上传图片呢?

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
二进制列 怎么实现web上传图片呢?  发帖心情 Post By:2020/5/19 10:54:00 [只看该作者]

二进制列 怎么实现web上传图片呢?
当前无法上传图片文件到二进制列
图片列是二进制列
代码如下:
Dim e As RequestEventArgs = args(0)
Dim wb As New weui
Dim cmd As New SQ LCommand
cmd.C '记得设置数据源名称
cmd.CommandText = "Sel ect Count(*) From {web上传图片}"
Dim Count As Integer = cmd.ExecuteScalar() '获取总的行数
Dim dt As DataTable = cmd.ExecuteReader


Select Case e.Path
    Case "index.htm"
        If e.PostValues.Count = 0 Then
            wb.AddForm("","form1","index.htm")
            With wb.AddInputGroup("form1","ipg1","增加图片")
                .AddInput("单位名称","单位名称","Text") '前一个"姓名"是ID,后一个"姓名"是标题
                .AddInput("所属支部","所属支部","Text")
                .AddInput("姓名","姓名","Text")
                .AddInput("图片类型","图片类型","Text")
                .AddUploader("up1","图片",True) 'True表示允许上传多个文件
            End With
            With wb.AddButtonGroup("form1","btg1",True)
                .Add("btn1", "确定", "submit")
            End With
            e.WriteString(wb.Build)
        Else
            Dim nms() As String = {"单位名称","所属支部","姓名","图片类型","图片"}
            Dim dr As DataRow = dt.AddNew()
            For Each nm As String In nms
                dr(nm) = e.PostValues(nm)
            Next
            dr.save
            
            
            For Each key As String In e.Files.Keys
                If key = "up1" Then
                    For Each fln As String In e.Files(key)   
                        e.SaveFile(key, fln, ProjectPath & "Attachments\" & fln)   这个部分可以保存图片到指定目录了
                        'dr.Lines("图片") = e.Files(key)
                        dr.DataRows.SQ LInsertFile("图片",ProjectPath & "Attachments\" & fln) '插入文件   想实现上传的图片直接写入图片二进制列里
                    Next
                End If
            Next
            '保存并生成增加成功提示页面
            dr.save()
            With wb.AddMsgPage("","msgpage","增加成功", "好好学习,天天向上") '生成成功提示页
                .AddButton("btn1","继续增加","index.htm")
            End With
            e.WriteString(wb.Build)
        End If
        
End Select
[此贴子已经被作者于2020/5/19 11:29:15编辑过]

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


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/19 11:36:00 [只看该作者]

SQLInsertFile这个用法不支持临时表。需要使用sql更新,比如

Dim cmd As new SQLCommand
cmd.ConnectionName = "test"
cmd.CommandText = "Insert Into test (图片) Values(?)"
Dim ImageByte() As Byte = System.IO.File.ReadAllBytes("D:\test.JPG") '读取文件流,并将读到的二进制数据放入数组ImageByte中,
cmd.Parameters.Add("@图片", ImageByte)
cmd.ExecuteNonQuery
[此贴子已经被作者于2020/5/19 11:36:57编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)SQLInsertFile这个用法不支持临时表。...  发帖心情 Post By:2020/5/19 14:18:00 [只看该作者]

老师  按照你提供的思路  运行下面的无结果
我web上传图片不是零时表  是已经加载到项目里的  



以下内容是专门发给有点蓝浏览



[此贴子已经被作者于2020/5/19 15:11:58编辑过]

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)SQLInsertFile这个用法不支持临时表。...  发帖心情 Post By:2020/5/19 14:45:00 [只看该作者]


以下内容是专门发给有点蓝浏览





[此贴子已经被作者于2020/5/19 15:14:27编辑过]

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


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/19 15:33:00 [只看该作者]

使用cmd.ExecuteReader获得的表就是临时表

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


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/19 15:36:00 [只看该作者]

Dim dr As Row = Tables("web上传图片").AddNew()
dr.save 必须先保存,才能插入二进制数据

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


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/19 15:39:00 [只看该作者]

在web服务端千万不要使用Tables("xxx").Current这种用法,因为多人使用的使用,A新增了一行,然后B也新增了一行,A再去取Current,有可能就是B新增的行,而不是A新增的行

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


加好友 发短信
等级:九尾狐 帖子:2472 积分:17346 威望:0 精华:0 注册:2013/1/31 0:03:00
回复:(有点蓝)在web服务端千万不要使用Tables("xxx...  发帖心情 Post By:2020/5/19 15:55:00 [只看该作者]


老师

以下内容是专门发给有点蓝浏览



Dim wb As New weui
Dim cmd As New S QLCommand
cmd.Conn ecti
'cmd.Co mmandText = "Sel ect * From {web上传图片}"
Dim dt As DataTable = cmd.ExecuteReader
Select Case e.Path

    Case "index1.htm"
        If e.PostValues.Count = 0 Then
            wb.AddForm("","form1","index1.htm")
            With wb.AddInputGroup("form1","ipg1","增加图片")
                .AddSelect("单位名称","单位名称","瓮安|") '前一个"姓名"是ID,后一个"姓名"是标题
                .AddSelect("所属支部","所属支部","第一支部|第二支部")
                .AddInput("姓名","姓名","Text")
                .AddSelect("图片类别","图片类别","|会议记录|学习记录|学习心得|其它材料")
                '.AddUploader("up1","图片",True) 'True表示允许上传多个文件              ‘’这个部分启用的时候 可以实现图片上传操作


            End With
            
            With wb.AddInputGroup("form1","ipg2","文件上传") '文件上传                 ‘’这个部分启用的时候无法实现多个文件上传操作【求解】
                With.AddUploader("up1","图片",True) 'True表示允许上传多个文件
                .AllowDelete = True '允许删除
                .Incremental = True '允许重复选择文件或连续拍照
            End With


        End With
        With wb.AddButtonGroup("form1","btg1",True)
            .Add("btn1", "确定", "submit")
        End With
        e.WriteString(wb.Build)
    Else
        Dim st As New Date(1970,1,1,8,0,0)
        Dim d As Date = cdate("2020-02-01")
        Dim t As Long = (Date.Now - st).TotalSeconds()
        
        Dim nms() As String = {"单位名称","所属支部","姓名","图片类别","图片名称"}
        Dim dr As DataRow = DataTables("web上传图片").AddNew()
        For Each nm As String In nms
            dr(nm) = e.PostValues(nm)
            dr("时间戳")=t
        Next
        dr.Save
        Dim dr1 As DataRow = Tables("web上传图片").Current.DataRow        ‘’这个部分老师有什么好的建议么?根据老师的建议该怎么改比较合适呢?
        If dr1.RowState = DataRowState.Added Then '如果是新增行,必须先保存才能插入文件
            dr1.Save()
        End If

        For Each key As String In e.Files.Keys
            If key = "up1" Then
                For Each fln As String In e.Files(key)
                    Dim wj As String =ProjectPath & "Attachments\" & dr("姓名") & dr("图片类别") & fln
                    e.SaveFile(key,fln,wj)
                    dr.Lines("图片名称") = e.Files(key)
                    
                    dr.SQLInsertFile("图片",wj) '插入文件     ‘
                    启用这个后文件名称和二进制都能够如下图对应到一行
                    
图片点击可在新窗口打开查看此主题相关图片如下:3.png
图片点击可在新窗口打开查看
                    'cmd.CommandText = "Insert Into web上传图片(图片) Values(?)"     
                    'Dim ImageByte() As Byte = System.IO.File.ReadAllBytes(wj) '读取文件流,并将读到的二进制数据放入数组ImageByte中,
                    'cmd.Parameters.Add("@图片", ImageByte)
                    'cmd.ExecuteNonQuery
                     这个部分启用的时候 保存的二进制文件会单独再新增一行【求解,怎么实现如上红色部分实现的一行效果】
                    
图片点击可在新窗口打开查看此主题相关图片如下:4.png
图片点击可在新窗口打开查看
                    ' MessageBox.Show(FileSys.GetName(wj))
                Next
                
            End If
        Next
        '保存并生成增加成功提示页面
        dr.save()
        With wb.AddMsgPage("","msgpage","增加成功", "好好学习,天天向上") '生成成功提示页
            .AddButton("btn1","继续增加","index1.htm")
        End With
        e.WriteString(wb.Build)
    End If
    
[此贴子已经被作者于2020/5/19 16:20:09编辑过]

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


加好友 发短信
等级:三尾狐 帖子:621 积分:5130 威望:0 精华:1 注册:2014/8/7 6:56:00
  发帖心情 Post By:2020/5/19 15:57:00 [只看该作者]

不撒谎,狐表的技术人员是最认真的

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


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/19 16:40:00 [只看该作者]

既然都有了一个dr,又何必多此一举?下面这段代码全部去掉即可

        Dim dr1 As DataRow = Tables("web上传图片").Current.DataRow        ‘’这个部分老师有什么好的建议么?根据老师的建议该怎么改比较合适呢?
        If dr1.RowState = DataRowState.Added Then '如果是新增行,必须先保存才能插入文件
            dr1.Save()
        End If

我只是提供一个例子,不代表可以直接抄,Insert Into本来就是插入的用法,如果要更新数据,学一下sql:http://www.foxtable.com/webhelp/topics/0690.htm

 回到顶部
总数 22 1 2 3 下一页