winform 查看远程服务器上的文件
解决方案:
1. 在目标服务器上发布webservice,实现文件下载的方法。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Services;
- using System.IO;
- using System.Data;
- namespace TRNWebService
- {
- /// <summary>
- /// FileHelperService 的摘要说明
- /// </summary>
- [WebService(Namespace = "http://tempuri.org/")]
- [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
- [System.ComponentModel.ToolboxItem(false)]
- // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
- // [System.Web.Script.Services.ScriptService]
- public class FileHelperService : System.Web.Services.WebService
- {
- /// <summary>
- /// 从指定文件夹下获取文件
- /// </summary>
- /// <param name="dicpath"></param>
- /// <returns></returns>
- [WebMethod(EnableSession = true, Description = "获取文件夹下面的文件")]
- public DataTable GetFileList(string dicpath)
- {
- DataTable dt = new DataTable();
- dt.TableName = "AEFiles";
- dt.Columns.Add("fileName", typeof(string));
- dt.Columns.Add("filePath", typeof(string));
- DirectoryInfo dir = System.IO.Directory.CreateDirectory(dicpath);
- if (dir == null)
- {
- return null;
- }
- FileInfo[] files = dir.GetFiles();
- for (int i = ; i < files.Length; i++)
- {
- FileInfo file = files[i] as FileInfo;
- if (file != null)
- {
- dt.Rows.Add(file.Name, file.FullName);
- }
- }
- return dt;
- }
- [WebMethod(Description = "下载服务器站点文件,传递文件相对路径")]
- public byte[] DownloadFile(string strFilePath)
- {
- FileStream fs = null;
- //string CurrentUploadFolderPath = Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["UploadFileFolder"]);
- //string CurrentUploadFilePath = CurrentUploadFolderPath + strFilePath;
- string CurrentUploadFilePath = strFilePath;
- if (File.Exists(CurrentUploadFilePath))
- {
- try
- {
- ///打开现有文件以进行读取。
- fs = File.OpenRead(CurrentUploadFilePath);
- int b1;
- System.IO.MemoryStream tempStream = new System.IO.MemoryStream();
- while ((b1 = fs.ReadByte()) != -)
- {
- tempStream.WriteByte(((byte)b1));
- }
- return tempStream.ToArray();
- }
- catch (Exception ex)
- {
- return new byte[];
- }
- finally
- {
- fs.Close();
- }
- }
- else
- {
- return new byte[];
- }
- }
- }
- }
webservice 下载文件
2. 客户端利用反射实现webservice,把文件下载到本地的安装目录
3. 客户端打开已经存放在本地的文件
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.CodeDom.Compiler;
- using System.Net;
- using System.IO;
- using Microsoft.CSharp;
- using System.CodeDom;
- using System.Web.Services.Description;
- namespace Frm.Common
- {
- public static class WebServiceInvoke
- {
- #region InvokeWebService
- //动态调用web服务
- public static object InvokeWebService(string url, string methodname, object[] args)
- {
- return InvokeWebService(url, null, methodname, args);
- }
- public static object InvokeWebService(string url, string classname, string methodname, object[] args)
- {
- string @namespace = "TRNWebService";
- if ((classname == null) || (classname == ""))
- {
- classname = GetWsClassName(url);
- }
- try
- {
- //获取WSDL
- WebClient wc = new WebClient();
- Stream stream = wc.OpenRead(url + "?WSDL");
- ServiceDescription sd = ServiceDescription.Read(stream);
- ServiceDescriptionImporter sdi = new ServiceDescriptionImporter();
- sdi.AddServiceDescription(sd, "", "");
- CodeNamespace cn = new CodeNamespace(@namespace);
- //生成客户端代理类代码
- CodeCompileUnit ccu = new CodeCompileUnit();
- ccu.Namespaces.Add(cn);
- sdi.Import(cn, ccu);
- CSharpCodeProvider csc = new CSharpCodeProvider();
- ICodeCompiler icc = csc.CreateCompiler();
- //设定编译参数
- CompilerParameters cplist = new CompilerParameters();
- cplist.GenerateExecutable = false;
- cplist.GenerateInMemory = true;
- cplist.ReferencedAssemblies.Add("System.dll");
- cplist.ReferencedAssemblies.Add("System.XML.dll");
- cplist.ReferencedAssemblies.Add("System.Web.Services.dll");
- cplist.ReferencedAssemblies.Add("System.Data.dll");
- //编译代理类
- CompilerResults cr = icc.CompileAssemblyFromDom(cplist, ccu);
- if (true == cr.Errors.HasErrors)
- {
- System.Text.StringBuilder sb = new System.Text.StringBuilder();
- foreach (System.CodeDom.Compiler.CompilerError ce in cr.Errors)
- {
- sb.Append(ce.ToString());
- sb.Append(System.Environment.NewLine);
- }
- throw new Exception(sb.ToString());
- }
- //生成代理实例,并调用方法
- System.Reflection.Assembly assembly = cr.CompiledAssembly;
- Type t = assembly.GetType(@namespace + "." + classname, true, true);
- object obj = Activator.CreateInstance(t);
- System.Reflection.MethodInfo mi = t.GetMethod(methodname);
- return mi.Invoke(obj, args);
- }
- catch (Exception ex)
- {
- throw new Exception(ex.InnerException.Message, new Exception(ex.InnerException.StackTrace));
- }
- }
- private static string GetWsClassName(string wsUrl)
- {
- string[] parts = wsUrl.Split('/');
- string[] pps = parts[parts.Length - ].Split('.');
- return pps[];
- }
- #endregion
- }
- }
c# 利用反射实现动态webservice
- /// <summary>
- /// 通过WebService下载文件
- /// </summary>
- /// <param name="ServiceFilePath">服务器图片路径</param>
- /// <param name="DownloadFolderPath">本地图片路径</param>
- private string DownloadFile(string ServiceFilePath, string DownloadFolderPath)
- {
- try
- {
- string DownloadFileName = "";
- if (ServiceFilePath.Contains("/"))
- {
- DownloadFileName = ServiceFilePath.Substring(ServiceFilePath.LastIndexOf("/"));
- }
- else if (ServiceFilePath.Contains("\\"))
- {
- DownloadFileName = ServiceFilePath.Substring(ServiceFilePath.LastIndexOf("\\")+);
- }
- else
- {
- DownloadFileName = ServiceFilePath;
- }
- string DownloadFilePath = DownloadFolderPath + "\\" + DownloadFileName;
- Dictionary<string, string> dicSystem = Common.AppConfigSys.AppConfigDic;
- string strUrl = dicSystem["webserviceURL"];//webservice的发布位置(http://192.168.10.3:8084/FileHelperService.asmx)
- object[] objPara = new object[];
- objPara[] = ServiceFilePath;
- object objFile = Frm.Common.WebServiceInvoke.InvokeWebService(strUrl, "DownloadFile", objPara);
- byte[] bytes = (byte[])objFile;
- if (bytes != null)
- {
- if (!Directory.Exists(DownloadFolderPath))
- {
- Directory.CreateDirectory(DownloadFolderPath);
- }
- if (!File.Exists(DownloadFilePath))
- {
- File.Create(DownloadFilePath).Dispose();
- }
- //如果不存在完整的上传路径就创建
- FileInfo downloadInfo = new FileInfo(DownloadFilePath);
- if (downloadInfo.IsReadOnly) { downloadInfo.IsReadOnly = false; }
- //定义并实例化一个内存流,以存放提交上来的字节数组。
- MemoryStream ms = new MemoryStream(bytes);
- //定义实际文件对象,保存上载的文件。
- FileStream fs = new FileStream(DownloadFilePath, FileMode.Create);
- ///把内内存里的数据写入物理文件
- ms.WriteTo(fs);
- fs.Flush();
- ms.Flush();
- ms.Close();
- fs.Close();
- fs = null;
- ms = null;
- }
- return DownloadFilePath;
- }
- catch (Exception ex)
- {
- return "";
- }
- }
客户端文件下载方法
- void AElink_Click(object sender, EventArgs e)
- {
- LinkLabel link = sender as LinkLabel;
- string serverfilePath = link.Tag.ToString();//服务器上的文件地址
- string clientfilePath = DownloadFile(serverfilePath, Application.StartupPath + "\\UploadFileFolder");//客户端的文件地址
- System.Diagnostics.Process.Start(clientfilePath);//打开本地文件
- }
文件下载方法调用
winform 查看远程服务器上的文件的更多相关文章
- xshell终端向远程服务器上传文件方法
centos-7下在本地终端里向远程服务器上传文件,在命令行中执行的软件. 安装命令如下: 在终端里输入如下命令: 会弹出如下窗口 选择你要上传的文件即可上传成功.
- Python: 如何判断远程服务器上Excel文件是否被人打开
最近工作中需要去判断远程服务器上的某个Excel文件是否被打开,如果被人打开,则等待,如果没人打开使用,则去填写数据进Excel文件. 开始想的很简单,和其他语言一样,比如C#,打开文件,如果报错说明 ...
- php curl向远程服务器上传文件
<?php /** * test.php: */ header('content-type:text/html;charset=utf8'); $ch = curl_init(); //加@符号 ...
- 模拟php curl向远程服务器上传文件
test.php <?php header('content-type:text/html;charset=utf8'); $file = dirname(__FILE__).'/1.jpg'; ...
- Mac安装SSHFS挂载远程服务器上的文件夹到本地
一.安装SSHFUS sshfs依赖于fuse,所以需要先安装fuse,这两个软件都可以在https://osxfuse.github.io/下载到. 注意安装顺序. 二.挂载文件夹到本地 输入一下命 ...
- php访问远程服务器上的文件
test.php <?php $fp=fopen('http://www.baidu.com', 'r'); while (!feof($fp)) { $chunk=fgets($fp); ec ...
- 用java 代码下载Samba服务器上的文件到本地目录以及上传本地文件到Samba服务器
引入: 在我们昨天架设好了Samba服务器上并且创建了一个 Samba 账户后,我们就迫不及待的想用JAVA去操作Samba服务器了,我们找到了一个框架叫 jcifs,可以高效的完成我们工作. 实践: ...
- 利用SSH在本机和远程服务器之间传输文件或文件夹
1.从远程服务器上下载文件到本机 scp <服务器用户名>@<服务器地址>:<服务器中要下载的文件路径> <下载到本机的绝对路径> 2.从本机上传本地文 ...
- scp 从远程服务器上一下载文件
scp -P202 xx3.x6.xx.xx:/usr/local/zookeeper-.zip /tmp #指定远程服务器的端口和远程服务器的目标文件 ,最后指定要下载到本的地目录 也可以从远程服务 ...
随机推荐
- mysql用法之创建事件
1.创建事件:每天凌晨两点自动删除de_records表中七天以前的数据 CREATE EVENT event_delete_de_records_7days ON SCHEDULE EVERY 1 ...
- linux下安装oracle需要的配置
1.检查系统包安装情况 rpm -qa|grep binutils rpm -ivh sysstat-7.0.2.rpm rpm -ivh binutils-2.17.50.0.6-14.el5.*. ...
- jQuery最佳实践:如何用好jQuery
一.用对选择器 在jQuery中,你可以用多种选择器,选择同一个网页元素.每种选择器的性能是不一样的,你应该了解它们的性能差异. (1)最快的选择器:id选择器和元素标签选择器 举例来说,下面的语句性 ...
- 数组类型参数传递问题:$.ajax传递数组的traditional参数传递必须true
数组类型参数传递: 若一个请求中包含多个值,如:(test.action?tid=1&tid=2&tid=3),参数都是同一个,只是指定多个值,这样请求时后台会发生解析错误,应先使用 ...
- http网络通信--页面源代码查看
1.要在andorid中实现网络图片查看,涉及到用户隐私问题,所以要在AndroidManifest.xml中添加访问网络权限 <uses-permission android:name=&qu ...
- python 带颜色样式打印到终端
#!/usr/bin/python # -*- coding: utf-8 -*- """ Created on Tue Aug 8 17:01:54 2017 @aut ...
- vue - v-text 和 v-html
1.官方有了{{data}}绑定数据了,为啥还要v-text 因为网络问题,可以我们会卡到看“{{}}”,很尴尬吧!!! => 因此推荐用v-text 2. v-html是啥? 能吃吗 , v- ...
- java String->float,float->int
类型转换代码 : String sourceStr = "0.0"; String类型 float sourceF = Float.valueOf(sourceStr); floa ...
- 【Statistics】CAP曲线
功能描述 CAP曲线(Cumulative Accuracy Profile)/Power Curve(准确率/AR)是描述整个评级结果下,累计违约客户比例与累计客户比例的关系. 在完美的模型下,CA ...
- ECMAScript 6 | 新特性
新特性概览 参考文章: http://www.cnblogs.com/Wayou/p/es6_new_features.html ——————————————————————————————————— ...