以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  二进制列 怎么实现web上传图片呢?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=150038)

--  作者:李孝春
--  发布时间:2020/5/19 10:54:00
--  二进制列 怎么实现web上传图片呢?
二进制列 怎么实现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编辑过]

--  作者:有点蓝
--  发布时间: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编辑过]

--  作者:李孝春
--  发布时间:2020/5/19 14:18:00
--  回复:(有点蓝)SQLInsertFile这个用法不支持临时表。...
老师  按照你提供的思路  运行下面的无结果
我web上传图片不是零时表  是已经加载到项目里的  



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



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

--  作者:李孝春
--  发布时间:2020/5/19 14:45:00
--  回复:(有点蓝)SQLInsertFile这个用法不支持临时表。...

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





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

--  作者:有点蓝
--  发布时间:2020/5/19 15:33:00
--  
使用cmd.ExecuteReader获得的表就是临时表
--  作者:有点蓝
--  发布时间:2020/5/19 15:36:00
--  
Dim dr As Row = Tables("web上传图片").AddNew()
dr.save 必须先保存,才能插入二进制数据

--  作者:有点蓝
--  发布时间:2020/5/19 15:39:00
--  
在web服务端千万不要使用Tables("xxx").Current这种用法,因为多人使用的使用,A新增了一行,然后B也新增了一行,A再去取Current,有可能就是B新增的行,而不是A新增的行
--  作者:李孝春
--  发布时间:2020/5/19 15:55:00
--  回复:(有点蓝)在web服务端千万不要使用Tables("xxx...

老师

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



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编辑过]

--  作者:飞飞
--  发布时间:2020/5/19 15:57:00
--  
不撒谎,狐表的技术人员是最认真的
--  作者:有点蓝
--  发布时间: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