以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  移动开发 照片上传咨询  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=106985)

--  作者:qwz405
--  发布时间:2017/9/19 16:35:00
--  移动开发 照片上传咨询
参照帮助文件:http://www.foxtable.com/mobilehelp/index.htm?page=0251.htm

使用如下代码:
Dim e As RequestEventArgs = args(0)

Dim wb As New weui

wb.AddForm("","form1","dd.htm")

If e.PostValues.Count = 0 Then     \'如果是首次登陆
    
    With wb.AddInputGroup("form1","ipg1","主題")
        .AddInput("txt1","","Text")
    End With
    
    With wb.AddInputGroup("form1","ipg2","上传图片")
        With .AddUploader("up128","照片",True)
            .AllowDelete = True \'允许删除
            .Incremental = True \'允许重复选择文件或连续拍照
            .ScaleWidth = 1000 \'自动压缩图片宽度为1000个像素,高度等比例压缩
        End With
    End With
    
    With wb.AddButtonGroup("form1","btg1",True)
        .Add("btn1", "确定", "button").Attribute= ****    \'调用js函数上传
    End With
    
    wb.AddToast("","tst1", "正在上传",1)
    wb.AddToast("","tst2", "上传成功",0)
    wb.AddToast("","tst3", "上传失败",0).Icon= "warn"
    
    wb.AppendHTML("<script src=\'./lib/tl_notice_2.js\'></script>") \'引入脚本文件
    
Else
    
    Dim dr As DataRow = DataTables("管理公告").AddNew()
    dr("主題") = e.PostValues("txt1")
    
    For Each key As String In e.Files.Keys
        For Each fl As String In e.Files(key)
            Dim NewName As String = fl
            Dim idx As Integer = fl.LastIndexOf(".")
            Dim cnt As Integer = 1
            Do While FileSys.FileExists("d:\\web\\uploadfiles\\" & NewName)   \'判断文件夹是否存在同名文件
                NewName = fl.Insert(idx,"(" & cnt & ")")    \'如果存在同名文件,在原文件名加上序号
                cnt = cnt + 1 \'递增序号
            Loop
            e.SaveFile(key,fl,"d:\\web\\uploadfiles\\" & NewName) \'保存接收到的文件
            dr.Lines("照片") = dr("照片") & e.Files(key)      \'-----> 请教:如果要在照片列记录所有照片名称,代码要怎么写?
        Next
    Next
    
    dr.Save()
    
    e.WriteString("OK")
End If
e.WriteString(wb.Build)


JS函数如下所示:
function submitForm(){
    show("tst1",2000);
    var result = submitAjaxForm(\'form1\',\'afterSubmit\');
}

function afterSubmit(result){
    hide("tst1");
    if (result==\'OK\') {
        show("tst2");
        location="aa.htm?v="+Math.random();
    }
    else{
        show("tst3",2000);
    }
}


咨询:
1.上面红色咨询的,如何在“照片”列中保存全部上传的照片名称?---后续网页查看照片时,又如何分开来,显示多张照片
2.用微信浏览器及苹果手机微信端测试,能正常上传1张及多张照片。
3.用安卓手机,上传1张照片正常;上传2张及更多照片时,手机会卡住,等待或者直接退出照片上传,服务器报警:由于线程退出或应用程序请求,已中止 I/O 操作。


图片点击可在新窗口打开查看此主题相关图片如下:222.jpg
图片点击可在新窗口打开查看

[此贴子已经被作者于2017/9/19 16:36:21编辑过]

--  作者:有点甜
--  发布时间:2017/9/19 19:03:00
--  

1、参考

 

http://www.foxtable.com/webhelp/scr/2717.htm

 

2、3、代码应该有问题,下面两个地方重复了,只能用一次e.WriteString

 

    e.WriteString("OK")
    Return
End If
e.WriteString(wb.Build)

--  作者:浙江仔
--  发布时间:2017/9/20 9:29:00
--  

  我把每个照片的路径作为一条记录,放在C_SI_Estimate_DTL_FILES表中

显示如下: 

        Dim sdr As  DataRow = DataTables("C_SI_Estimate_DTL_FILES").SQLFind("DTL_id = \'" & xdr("DTL_id")  & "\' and IS_ACTIVE =\'1\' ")

            With .AddUploader("up1","照片",True) \'True表示允许上传多个文件

                .ScaleWidth= 800

                If sdr IsNot Nothing Then

                    For Each dr As DataRow In DataTables("C_SI_Estimate_DTL_FILES").SQLSelect("DTL_id = \'" & xdr("DTL_id")  & "\' and is_active=\'1\' ")

                        .AddImage( "./upload/" & dr("FILES_SAVENAME") )

                    Next

                End If

               

            End With

 

 

保存附件如下:

 

 

    \'保存附件

    For Each key As String In e.Files.Keys

        If key = "up1" Then

            For Each fln As String In e.Files(key)

                Dim s As String=fln

                s=s.substring(s.LastIndexOf("."))

                Dim s2 As String =Guid.NewGuid().ToString().replace("-","")

                s= s2  & s

                e.SaveFile(key, fln, ProjectPath & "web\\upload\\" & s)

                Dim dr2 As DataRow = DataTables("C_SI_Estimate_DTL_FILES").SQLAddNew()

                dr2("FILES_SAVENAME") = s

                dr2("FILES_NAME") = fln

                dr2("DTL_id")=Dtlid

                dr2("CREATE_TIME")=now.Tostring.replace("-","").replace(" ","").replace(":","")

                dr2("UPDATE_TIME")=now.Tostring.replace("-","").replace(" ","").replace(":","")

                dr2("IS_ACTIVE")="1"

                If openid>"" Then

                    dr2("creator")=fdp("person_id")

                   

                Else

                    dr2("creator")="test"

                End If

                dr2.save()

            Next

        End If

    Next


--  作者:qwz405
--  发布时间:2017/9/20 9:41:00
--  
老师,您好。
按您的指导,代码增加了“return”,还是微信浏览器/苹果手机微信端,上传图片正常;安卓手机微信端上传就会卡死,然后就跳如 1楼 所示错误。

代码:
Dim e As RequestEventArgs = args(0)

Dim wb As New weui

wb.AddForm("","form1","dd.htm")

If e.PostValues.Count = 0 Then     \'如果是首次登陆
    
    With wb.AddInputGroup("form1","ipg1","主題")
        .AddTextArea("txt1",1).Placeholder = "15字以內(必填)"
    End With
    
    With wb.AddInputGroup("form1","ipg2","備註")
        .AddTextArea("txt2",3).Placeholder = "200字以內(非必填)"
    End With
    
    With wb.AddInputGroup("form1","ipg3","上传图片")
        With .AddUploader("up128","照片",True)
            .AllowDelete = True \'允许删除
            .Incremental = True \'允许重复选择文件或连续拍照
            .ScaleWidth = 1000 \'自动压缩图片宽度为1000个像素,高度等比例压缩
        End With
    End With
    
    With wb.AddButtonGroup("form1","btg1",True)
        .Add("btn1", "确定", "button").Attribute= "o n c lick=\'s u b m itForm()\'" \'调用js函数上传
    End With
    
    wb.AddToast("","tst1", "正在上传",1)
    wb.AddToast("","tst2", "上传成功",0)
    wb.AddToast("","tst3", "上传失败",0).Icon= "warn"
    
    wb.AppendHTML("<script src=\'./lib/notic.js\'></script>") \'引入脚本文件
    
Else
    
    Dim dr As DataRow = DataTables("管理公告").AddNew()
    dr("主題") = e.PostValues("txt1")
    
    For Each key As String In e.Files.Keys
        For Each fl As String In e.Files(key)
            Dim NewName As String = fl
            Dim idx As Integer = fl.LastIndexOf(".")
            Dim cnt As Integer = 1
            Do While FileSys.FileExists("d:\\web\\uploadfiles\\" & NewName)   \'判断文件夹是否存在同名文件
                NewName = fl.Insert(idx,"(" & cnt & ")")    \'如果存在同名文件,在原文件名加上序号
                cnt = cnt + 1 \'递增序号
            Loop
            e.SaveFile(key,fl,"d:\\web\\uploadfiles\\" & NewName) \'保存接收到的文件
            dr.Lines("照片") = e.Files(key)
        Next
    Next
    
    dr.Save()
    
    e.WriteString("OK")
    
    Return ""   \'已完成上传,此处可以退出.
    
End If

e.WriteString(wb.Build)


JS代码:
//****      显示上传提示
function submitForm(){
    show("tst1",2000);
    var result = submitAjaxForm(\'form1\',\'afterSubmit\');
}

function afterSubmit(result){
    hide("tst1");
    if (result==\'OK\') {
        show("tst2");
        location="aa.htm?v="+Math.random();
    }
    else{
        show("tst3",2000);
    }
}



--  作者:有点甜
--  发布时间:2017/9/20 10:17:00
--  

1、在代码那里加入msgbox,看是否进入执行了代码,看执行到哪里开始出问题,弹出对应的值看有什么不同。

 

2、你httprequest是否写了多次 e.WriteString ?在函数执行完以后还写了 e.WriteString


--  作者:qwz405
--  发布时间:2017/9/20 12:01:00
--  
经测试,是压缩代码的问题。
将压缩比例改为100,就能正常使用,但改回1000后,就是出现上面所示的情况。

问题:
1.压缩比较太小,图片无法清晰查看。
2.苹果、电脑端能正常使用,安卓手机就不行,奇怪。。。苹果手机拍的照片也不小。

希望压缩比能大点,这样查看的图片也能清晰。..是否有办法

...
   With wb.AddInputGroup("form1","ipg3","上传图片")
        With .AddUploader("up128","照片",True)
            .AllowDelete = True \'允许删除
            .Incremental = True \'允许重复选择文件或连续拍照
            .ScaleWidth = 100 \'自动压缩图片宽度为100个像素,高度等比例压缩
        End With
    End With
...
[此贴子已经被作者于2017/9/20 12:01:49编辑过]

--  作者:有点甜
--  发布时间:2017/9/20 12:14:00
--  

 不设置缩放呢?

 

 在服务器端,保存之后,再对图片进行处理也行,这样简单很多。


--  作者:qwz405
--  发布时间:2017/9/20 15:55:00
--  
老师,为了达到没有上传照片,禁止保存,我将JS代码修改如下:
现在不管传不传照片,都会弹错误,问题了出在:V3.length上,它无法判断是否有传照片。
咨询下代码要如何修改?

function submitForm(){
   var v1 = document.getElementById("txt1").value;        //主題
   var v2 = document.getElementById("txt2").value;        //備註
   var v3 = document.getElementById("up128").files;
   if (v1 && v1.length <= 15 && v2.length <= 200 && v3.length > 0){
       show("tst1",2000);
       var result = submitAjaxForm(\'form1\',\'afterSubmit\');
    }
   else{
  show("toptip1",2500);
       return false;
    }
}

--  作者:有点甜
--  发布时间:2017/9/20 16:02:00
--  

试试

 

alert("123");

var v3 = document.getElementById("up128_thumbnails").getElementsByTagName("li").length;

alert(v3);


--  作者:qwz405
--  发布时间:2017/9/22 13:34:00
--  
老师,您好。
经测试,发现使用AddImage显示照片,如果照片名:有空格,或者带(),都不能显示。

咨询:
1.是否确实没有办法处理?(我尝试使用 sb.AppendLine("<img src=\'./images/photo/tl_notice/照片\'><br/><br/>"),以上照片可以显示 )
2.还有哪些图片命名不能显示,我好提示使用者上传时规避。


        With wb.AddInputGroup("form1","ipg22","文件上传"\'带图片浏览的文件上传
            With .AddUploader("up2","
图片",True\'True表示允许一次上传多个文件
                .AddImage("./images/00(1).jpg")
                .AddImage("./images/00 2.jpg")
            End With
        End With