以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 移动开发问题请教:初学 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=111552) |
-- 作者:y2287958 -- 发布时间:2017/12/24 20:59:00 -- 移动开发问题请教:初学 代码如后。 我的目的是:将另一个服务器FTP中的图片下载到本服务器(要通过比较得到本服务器没有的图片),然后通过Uploader在手机浏览。 目前将下列代码放在HttpRequest事件中,是可以达成但效率明显不爽。图片下载这个代码不应该直接写在HttpRequest事件,但又不知道如何解决,特来请教,谢谢! 再问:如何在手机端通过一个按钮完成图片下载这个功能。 \'\'\' \'/1/--------通过SQLJoinTableBuilder形式得到登录者是否存在于数据库,如果不存在予提示并返回 Dim bm As String = "查询表1" Dim jb As New SQLJoinTableBuilder(bm,"数据表") jb.C jb.AddCols("*") jb.Filter = "编号=\'20170211001\'" Dim dt As DataTable = jb.Build(True) Dim dr As DataRow = dt.DataRows(0) \'/1/ If dr IsNot Nothing Dim 目标目录路径 As String = "e:\\web\\images\\图片\\" & dr("号码") \'/2/--------判断当前是否存在患者“号码”的目录,如果不存在则创建 If FileSys.DirectoryExists(目标目录路径) = False FileSys.CreateDirectory(目标目录路径) \'如果当前目录不存在则予创建 End If \'/2/ \'/3/--------声明并得到“目标目录路径”的所有文件名集合,便于与ftp中的文件名比较 Dim 目标目录文件名集 As new List(of String) For Each File As String In FileSys.GetFiles(目标目录路径) 目标目录文件名集.Add(FileSys.GetName(File)) Next \'/3/ \'/4/--------判断ftp是否可以连接,如果未连接重新连接,重新连接后如果不通予提示并返回 Dim nhftp As New FtpClient nhftp.host = "*.*.*.*" \'隐藏 nhftp.Port = "****" nhftp.Account = "****" nhftp.password = "****" nhftp.RootDir = "\\图片\\" \'设置nhftp根目录 If nhftp.Connected = False \'如果FTP没有连接 If nhftp.Connect = False \'如果FTP连接失败 Messagebox.show("连接FTP失败!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information) Return End If End If \'/4/ \'/5/--------比较ftp和目标目前文件名情况,如果目标目录不存在则下载,下载后期处理 Dim ftp目录文件名集 As List(of String) = nhftp.GetFileList(nhftp.RootDir & "/" & dr("号码")) \'得到ftp所有文件名集合 For Each ftp目录文件名 As String In ftp目录文件名集 Dim ftp文件路径 As String = nhftp.RootDir & dr("号码") & "/" & ftp目录文件名 Dim 目标文件路径 As String = 目标目录路径 & "\\" & ftp目录文件名 If 目标目录文件名集.Contains(ftp目录文件名) = False nhftp.Download(ftp文件路径,目标文件路径) Dim ifo As new FileInfo(目标文件路径) Dim img As image = getImage(目标文件路径) Dim bmp As bitmap If img.width > 500 Then \'如果照片宽度大于500 If 500 * (img.height / img.width) > 300 Then \'如果照片的高度大于500 bmp = new bitmap(img, 500*(300/(500*(img.height/img.width))), 300) Else bmp = new bitmap(img, 500, 500 * (img.height / img.width)) End If End If bmp.save(目标文件路径) bmp.Dispose \'以上缩放图片大小,以下压缩图片提高质量 img = getimage(目标文件路径) bmp = new bitmap(img.width, img.height) Dim g = graphics.fromimage(bmp) g.DrawImage(img, 0, 0, img.Width, img.Height) Dim jpgEncoder As ImageCodecInfo Dim codecs() As ImageCodecInfo = ImageCodecInfo.GetImageDecoders For Each codec As ImageCodecInfo In codecs If (codec.FormatID = ImageFormat.Jpeg.Guid) Then jpgEncoder = codec Exit For End If Next Dim myEncoder As System.Drawing.Imaging.Encoder = System.Drawing.Imaging.Encoder.Quality Dim myEncoderParameters As EncoderParameters = New EncoderParameters(1) Dim myEncoderParameter As EncoderParameter = New EncoderParameter(myEncoder, 100) \' 质量级别 0 对应于最大压缩,而质量级别 100 对应于最小压缩 myEncoderParameters.Param(0) = myEncoderParameter bmp.Save(目标文件路径, jpgEncoder, myEncoderParameters) bmp.dispose g.dispose End If Next \'/5/ \'通用事件头,用于发送已经存在的常见文件 Dim e As RequestEventArgs = args(0) Dim fl As String = "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",".gif",".png",".bmp",".wmf",".js",".css" ,".html",".htm",".zip",".rar" e.WriteFile(fl) Return \'这里必须返回 End Select End If \'以下是动态生成网页的代码 Dim wb As New WeUI \'定义一个基于weui框架的网页生成器 Select Case e.Path Case "test.htm" If e.PostValues.Count = 0 Then wb.AddToast("","提示1", "正在下载图片",1) \'定义提示 wb.AddForm("","表单1","test.htm") wb.AddForm("","表单1","test.htm").attribute= """ With wb.AddInputGroup("表单1","输入框分组1","文件上传") \'文件上传 .AddUploader("文件上传1","") End With With wb.AddInputGroup("表单1","输入框分组2","浏览式文件上传") \'带图片浏览的文件上传 With .AddUploader("文件上传2","图片",True) \'True表示允许一次上传多个文件 .AllowAdd = False \'关闭文件上传功能 For Each fl As String In FileSys.GetFiles(目标目录路径) Dim ifo As new FileInfo(fl) .AddImage("./images/图片/" & dr("号码") & "/" & ifo.Name) Next End With End With With wb.AddButtonGroup("表单1","按钮分组1",True) .Add("确定", "确定", "submit") End With Else wb.InsertHTML("接收到的数据有:<br/>") \'这个用于测试结果 For Each key As String In e.PostValues.Keys wb.InsertHTML(key & ":" & e.PostValues(key) & "<br/>") Next End If End Select e.WriteString(wb.Build) \'生成网页 End If [此贴子已经被作者于2017/12/24 21:11:30编辑过]
|
-- 作者:y2287958 -- 发布时间:2017/12/24 21:08:00 -- 或者说:是否可以直接浏览另外一个FTP中的图片? |
-- 作者:有点甜 -- 发布时间:2017/12/24 21:20:00 -- 1、为什么不另外做一个foxtable项目(或者在项目里面用多线程),实现比较和下载图片的功能?
2、你每次访问网站的时候,都连接ftp检测、下载一次,速度肯定慢。 |
-- 作者:y2287958 -- 发布时间:2017/12/24 21:49:00 -- 谢谢甜版,明白了。 新问题又来了,其他原因没办法将所有图片都批量下载到当前服务器中。想着在手机端设置一个按钮,让登录者有需要的时候单击该按钮实现图片下载功能,这个如何实现?
|
-- 作者:有点甜 -- 发布时间:2017/12/24 22:31:00 -- 以下是引用y2287958在2017/12/24 21:49:00的发言:
谢谢甜版,明白了。 新问题又来了,其他原因没办法将所有图片都批量下载到当前服务器中。想着在手机端设置一个按钮,让登录者有需要的时候单击该按钮实现图片下载功能,这个如何实现?
1、你要用download先从另一个服务器下载文件,然后再下载给用户
2、参考 http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=105484&replyID=723073&skin=1
|
-- 作者:y2287958 -- 发布时间:2017/12/24 23:20:00 -- 甜版,应该是我没表达清楚,我想实现的功能是:手机端设置一个按钮,实现从另一个服务器FTP下载图片到当前服务器,而不是从当前服务器下载到用户本地。 [此贴子已经被作者于2017/12/24 23:20:28编辑过]
|
-- 作者:有点甜 -- 发布时间:2017/12/25 8:51:00 -- httprequest里面写一个网页,里面写入ftpclient下载图片的代码。
跳转到此网页的时候,把图片的名称或者路径传递过来,在网页里面download。 |
-- 作者:y2287958 -- 发布时间:2017/12/25 9:05:00 -- 谢谢,已解决。 |