Foxtable(狐表)用户栏目专家坐堂 → [求助]移动开发 审批前怎么打开上传的附件?


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

主题:[求助]移动开发 审批前怎么打开上传的附件?

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
[求助]移动开发 审批前怎么打开上传的附件?  发帖心情 Post By:2017/9/10 13:54:00 [显示全部帖子]

在“合同评审”表中,“申请人”上传了3个“附件”:
/合同评审/申请人/A.docx
/合同评审/申请人/B.doc
/合同评审/申请人/C.jpg
审批人如果在PC端审批,在“附件”窗口中可以分别打开这3个文件进行查看,然后决定是否同意。
但如果在移动端,下列代码可以看到上述3个文件,但要怎样设置才能在点击“审批”按钮前打开查看呢?
请高手指点,谢谢!

    Case "test.htm"
        Dim wb As New weui
        wb.AddForm("","form1","test.htm")
        Dim dr As DataRow = DataTables("合同评审").SQLFind("[_Identify]=296")
        With wb.AddInputGroup("form1","ipg1","附件")
            .AddTextArea("附件",5).Value = dr("附件")
        End With
        With wb.AddButtonGroup("form1","btg1",True)
            .Add("btn1", "审批", "submit")
        End With
        e.WriteString(wb.Build)

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2017/9/12 15:08:00 [显示全部帖子]

还是不能理解甜版的代码含义,麻烦甜版根据我的项目实际给出全套代码和具体要求。谢谢。

1、申请人用电脑在“合同评审”表的“附件”列上传了3个合同文件,位于服务器的物理路径为:
e:\项目管理系统\合同评审\申请人\A.docx
e:\项目管理系统\合同评审\申请人\B.doc
e:\项目管理系统\合同评审\申请人\C.jpg

2、网页文件位于服务器的e:\web\合同附件不在该文件夹下,是否必须先把附件下载到e:\web\
你说:“做一个下载文件的页面,如 download.htm?key=abc.txt,是否就是在test.htm中增加一个按钮(比如“查看附件”)链接到这个网页?你说的“abc.txt”应该是对应我的“A.docx”,而且是在e:\web\下的A.docx,而不是/合同评审/申请人/A.docx”?

3、该条记录的主键值是可以获取的,假设为296

4、下列代码显示“附件”列的内容为:
/合同评审/申请人/A.docx
/合同评审/申请人/B.doc
/合同评审/申请人/C.jpg
    Case "test.htm"
        Dim wb As New weui
        wb.AddForm("","form1","test.htm")
        Dim dr As DataRow = DataTables("合同评审").SQLFind("[_Identify]=296")
        With wb.AddInputGroup("form1","ipg1","附件")
            .AddTextArea("附件",5).Value = dr("附件")
        End With
        With wb.AddButtonGroup("form1","btg1",True)
            .Add("btn1", "审批", "submit")
        End With
        e.WriteString(wb.Build)

5、dr("附件")是已知的,所以可以通过代码提取每个文件名。
在电脑的浏览器测试,可以通过FTP下载文件到硬盘,然后通过PROCESS打开,但手机不行。



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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2017/9/12 19:20:00 [显示全部帖子]

甜版,执行红色代码时出现下图错误:

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

    Case "test.htm"
        wb.AddForm("","form1","test.htm")
        dr = DataTables("合同评审").SQLFind("[_Identify]=296")
        With wb.AddInputGroup("form1","ipg1","附件")
            With .AddTextArea("附件",5)
                .Value = dr("附件")
            End With
        End With
        Dim file As String = dr("附件") '含回车的多行文件名
        Dim Lst() As String = file.Split(vbcrlf) '文件名数组
        If Lst.Length >0 Then '如果有附件
            With wb.AddListGroup("form1", "lsg", "查看附件")
                If Lst.Length=1 Then '只有一个附件
                    .Add("查看附件","查看附件", "", "download.htm?key=" & UrlEncode(lst(0))) '附件的url编码
                Else
                    For i = 0 To Lst.Length-1
                        .Add("查看附件" & i+1,"查看附件" & i+1, "", "download.htm?key=" & UrlEncode(lst(i)))
                    Next
                End If
            End With
        End If
        With wb.AddButtonGroup("form1","btg1",True)
            .Add("btn1", "审批", "submit")
        End With
    Case "download.htm" '选择查看附件1
        Dim file As String = e.Values("key") 'file=/合同评审/申请人/A.docx
        file = UrlDecode(file) 'url解码,不解码也可以,file=/合同评审/申请人/A.docx
        Dim file1 As String = file.Replace("/","\") 'file1=\合同评审\申请人\A.docx
        Dim idx1 As Integer = file1.LastIndexOf("\") '文件名中最后一个斜杆位置
        Dim file2 As String = file1.SubString(idx1+1) '获取不含路径的文件名,file2=A.docx
        Dim file3 As String = "e:\项目管理系统" & file1 '附件上传时的服务器物理路径 file3=e:\项目管理系统\合同评审\申请人\A.docx
        Dim fs As System.IO.FileStream = Nothing
        fs = System.IO.File.Open(file3, System.IO.FileMode.Open) '用file3
        Dim btFile As Byte() = New Byte(fs.Length - 1) {}
        fs.Read(btFile, 0, Convert.ToInt32(fs.Length))
        fs.Close()
        e.Response.Headers("Content-Disposition") = "attachment;filename=" & file '用file1~file3都出错,无法继续
        e.Response.ContentType = "application/octet-stream"
        Dim output = e.response.OutputStream
        output.Write(btFile,0,btFile.Length)
        output.Close()
[此贴子已经被作者于2017/9/12 19:34:50编辑过]

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2017/9/13 10:28:00 [显示全部帖子]

原因找到:甜版的代码不支持中文。原来我和蓝版一样,用英文文件名测试过,是通过的。
新问题1(查看附件1是始终正常的):“附件”列的文件名后有其它显示为空白的字符,但可用下列1、2行代码解决(用3、4行代码可以发现问题):
                    For i = 0 To Lst.Length-1
                      1  Dim zj As Integer = lst(i).IndexOf("/")
                      2  lst(i)=lst(i).SubString(zj)
                      3 Dim abc As String = abc & i & lst(i)
                      4  MessageBox.Show(abc)
                        .Add("查看附件" & i+1,"查看附件" & i+1, "", "download.htm?file=" & UrlEncode(lst(i)))
                    Next
新问题2:图片文件不用下载,可直接显示,但是,几K的小图标可以完整显示,而1M的图只显示上面一点。


[此贴子已经被作者于2017/9/13 10:30:29编辑过]

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2017/9/13 11:29:00 [显示全部帖子]

甜版:
1、编码后问题都解决了,但出现新的问题,服务器有错误提示:

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

2、用蓝版的代码测试的,就两行代码,比较简单。但电脑上用google、IE、2345(双内核、3种模式都切换了)浏览器测试、手机上用绿茶浏览器测试,都是一样的结果,只显示上面的一点点图片。


[此贴子已经被作者于2017/9/13 11:30:29编辑过]

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2017/9/13 12:42:00 [显示全部帖子]

蓝版:用你的代码,图片文件越小,显示越多,与浏览器无关(手机、电脑都测了)。
附相关全部代码:
Dim fl As String = "e:\web\" & e.path '"e:\web"为网页根目录.e.path的路径含网页文件名,分割符是"\",不是"/"
If filesys.FileExists(fl) '如果是请求一个已经存在的文件
    Dim idx As Integer = fl.LastIndexOf(".") '文件名中最后一个小数点位置
    Dim ext As String = fl.SubString(idx) '获取文件扩展名
    Select Case ext
        Case ".jpg",".png",".bmp",".wmf",".js",".css",".html",".htm",".doc",".docx",".xls",",xlsx"
            e.WriteFile(fl) '则发送此文件
            Return '这里必须返回
    End Select
End If
'用户内外网判断:Host: 返回IP地址,据此可以判断用户是外网还是内网用户
'If e.host="10.22.1.40" Then '内网
'ElseIf e.host="123.81.249.43" Then '外网
'End If
'登录:当用户第一次访问时,自动跳转到登录页面登录.htm,要求输入用户名和密码.如果身份验证失败,重新进入登录页面,并提示错误
'当验证通过后,自动跳转到首页.htm,并可访问任何其他页面.退出登录时,清除当前的登录状态,重新进入登录页面.
'身份验证
Dim wb As New weui
Dim Verified As Boolean '用于标记用户是否通过了身份验证
Dim UserName As String = e.Cookies("username") '从本机临时存储的cookie中获取用户名.Cookies是字典,包括所有的Cookie
Dim Password As String = e.Cookies("password") '从cookie中获取用户密码
Dim s1,s2,rw,rw0,fqr,jsr,jsr0,nms(),nm,bmmc As String
Dim fqrq As Date
Dim i,count As Integer
Dim dt As DataTable
Dim dc As DataCol
Dim dr,dr1 As DataRow
Select Case e.path
    Case "test.htm"
        wb.AddForm("","form1","test.htm")
        dr = DataTables("合同评审").SQLFind("[_Identify]=296")
        With wb.AddInputGroup("form1","ipg1","附件")
            With .AddTextArea("附件",5)
                .Value = dr("附件")
            End With
        End With
        Dim file As String = dr("附件") '含回车的多行文件名
        Dim Lst() As String = file.Split(vbcrlf) '文件名数组
        If Lst.Length >0 Then '如果有附件
            With wb.AddListGroup("form1", "lsg", "查看附件")
                If Lst.Length=1 Then '只有一个附件
                    .Add("查看附件","查看附件", "", "download.htm?file=" & UrlEncode(lst(0))) '(含路径)附件的url编码
                Else
                    For i = 0 To Lst.Length-1
                        Dim zj As Integer = lst(i).IndexOf("/")
                        lst(i)=lst(i).SubString(zj)
                        .Add("查看附件" & i+1,"查看附件" & i+1, "", "download.htm?file=" & UrlEncode(lst(i)))
                    Next
                End If
            End With
        End If
        With wb.AddButtonGroup("form1","btg1",True)
            .Add("btn1", "审批", "submit")
        End With
    Case "download.htm" '查看附件
        Dim file As String = "e:\项目管理系统" & e.Values("file").replace("/","\")
        e.WriteFile(file)
        'Dim file As String = e.Values("file")
        'Dim fs As System.IO.FileStream = Nothing
        'fs = System.IO.File.Open("e:\项目管理系统" & file, System.IO.FileMode.Open)
        'Dim btFile As Byte() = New Byte(fs.Length - 1) {}
        'fs.Read(btFile, 0, Convert.ToInt32(fs.Length))
        'fs.Close()
        'e.Response.Headers("Content-Disposition") = "attachment;filename=" & UrlEncode(FileSys.GetName(file))
        'e.Response.C
        'Dim output = e.response.OutputStream
        'output.Write(btFile,0,btFile.Length)
        'output.Close()
End Select
e.WriteString(wb.Build)

甜版:用你的代码,下载doc文件出现10楼的错误,下载图片文件出现以下错误:

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


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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2017/9/13 12:45:00 [显示全部帖子]

难道我的windows有问题了?
因为还没有发到服务器,只是本机测试。

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2017/9/13 13:36:00 [显示全部帖子]

谢谢甜版、蓝版。
现在用蓝版代码、在Case "download.htm"的最后加return,OK了
加了return之后,用甜版代码,还是出现10楼的错误,13楼的错误没有了。以后有空先重装系统试试。

甜版:我在Case "download.htm"的最后,加了return,就不用删除最后一句了,因为还有其他case要用到(这是一个已经在用的项目,现在只是想把“合同评审”也加进来)。


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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2017/9/15 8:57:00 [显示全部帖子]

甜版:
    电脑IP:10.22.5.123,电脑浏览器输入10.22.5.123:8888/test.htm,正常;
    但手机浏览器输入10.22.5.123:8888/test.htm,就会出现10楼的错误信息。
    请问你用手机测试也正常吗?

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


加好友 发短信
等级:四尾狐 帖子:977 积分:6835 威望:0 精华:0 注册:2012/4/2 21:49:00
  发帖心情 Post By:2017/9/15 14:37:00 [显示全部帖子]

甜版:你是否在BeforeShowErrorMessage事件设置了e.Cancel=True?我这样设置后就正常了
我把win7换成win10、只装foxtable、发布后拷到服务器、浏览器由绿茶换成QQ、版本换成8月19日、设置了共享、改成英文文件名、直接放在根目录,各种组合都试了,都会弹出10楼错误,但不影响运行。



 回到顶部
总数 13 1 2 下一页