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


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

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

帅哥哟,离线,有人找我吗?
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)

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/10 14:03:00 [只看该作者]

做一个下载文件的页面,如 download.htm?key=abc.txt

 

Select Case e.Path
    Case "test.htm"
       
    Case "download.htm"
        Dim file As String = e.Values("file")
        Dim fs As System.IO.FileStream = Nothing
        fs = System.IO.File.Open("d:\" & 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=" & file
        '输出文件格式
        e.Response.ContentType = "application/octet-stream"
       
        Dim output = e.response.OutputStream
        output.Write(btFile,0,btFile.Length)
        output.Close()
End Select

[此贴子已经被作者于2017/9/10 14:03:15编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
shenyl0211
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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打开,但手机不行。



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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/12 16:22:00 [只看该作者]

2、你文件放在哪里,对应的,这个路径就填写什么

 

 fs = System.IO.File.Open("d:\" & file, System.IO.FileMode.Open)

 

5、做个按钮,你要查看哪一个文件,对应就访问哪一个路径(红色代码要url编码一下) download.htm?key=/合同评审/申请人/A.docx


 回到顶部
帅哥哟,离线,有人找我吗?
shenyl0211
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


加好友 发短信
等级:超级版主 帖子:110592 积分:562856 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/9/12 21:27:00 [只看该作者]

应该是file2=A.docx

以下代码测试通过

Select Case e.Path
    Case "test.htm"
        Dim wb As New weui
        wb.AddForm("","form1","download.htm?file=" & UrlEncode("F2/123.doc"))
        With wb.AddButtonGroup("form1","btg1",True)
            .Add("btn1", "审批", "submit")
        End With
        e.WriteString(wb.Build)
    Case "download.htm"
        Dim file As String = e.Values("file")
        Dim fs As System.IO.FileStream = Nothing
        fs = System.IO.File.Open("f:\" & 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=" & FileSys.GetName(file)
        '输出文件格式
        e.Response.C
        
        Dim output = e.response.OutputStream
        output.Write(btFile,0,btFile.Length)
        output.Close()
End Select

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


加好友 发短信
等级:超级版主 帖子:110592 积分:562856 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/9/12 21:27:00 [只看该作者]

这样也可以

Select Case e.Path
    Case "test.htm"
        Dim wb As New weui
        wb.AddForm("","form1","test.htm")
        With wb.AddButtonGroup("form1","btg1",True)
            .Add("btn1", "审批", "button","download.htm?file=" & UrlEncode("F2/Northwind.mdb"))
        End With
        e.WriteString(wb.Build)
    Case "download.htm"
        Dim file As String = "f:\" & e.Values("file").replace("/","\")
        e.WriteFile(file)
End Select

 回到顶部
帅哥哟,离线,有人找我吗?
shenyl0211
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/9/13 10:51:00 [只看该作者]

1、得到的file是什么?得到的file3弹出是否正确?

 

最后这里要编码 e.Response.Headers("Content-Disposition") = "attachment;filename=" & UrlEncode(FileSys.GetName(file))

 

2、换个浏览器能否正常显示?单独做个例子发上来看看。


 回到顶部
帅哥哟,离线,有人找我吗?
shenyl0211
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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