Foxtable(狐表)用户栏目专家坐堂 → 移动开发 照片上传咨询


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

主题:移动开发 照片上传咨询

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


加好友 发短信
等级:二尾狐 帖子:526 积分:5083 威望:0 精华:0 注册:2015/4/15 15:25:00
移动开发 照片上传咨询  发帖心情 Post By: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编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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)

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


加好友 发短信
等级:六尾狐 帖子:1326 积分:9603 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By: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
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:526 积分:5083 威望:0 精华:0 注册:2015/4/15 15:25:00
  发帖心情 Post By: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);
    }
}



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


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

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

 

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


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


加好友 发短信
等级:二尾狐 帖子:526 积分:5083 威望:0 精华:0 注册:2015/4/15 15:25:00
  发帖心情 Post By: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编辑过]

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


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

 不设置缩放呢?

 

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


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


加好友 发短信
等级:二尾狐 帖子:526 积分:5083 威望:0 精华:0 注册:2015/4/15 15:25:00
  发帖心情 Post By: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;
    }
}

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


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

试试

 

alert("123");

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

alert(v3);


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


加好友 发短信
等级:二尾狐 帖子:526 积分:5083 威望:0 精华:0 注册:2015/4/15 15:25:00
  发帖心情 Post By: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

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