zoukankan      html  css  js  c++  java
  • 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 = 0; 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()) != -1)
                        {
                            tempStream.WriteByte(((byte)b1));
                        }
                        return tempStream.ToArray();
                    }
                    catch (Exception ex)
                    {
                        return new byte[0];
                    }
                    finally
                    {
                        fs.Close();
                    }
                }
                else
                {
                    return new byte[0];
                }
            }
        }
    }
    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 - 1].Split('.');
    
                return pps[0];
            }
            #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("\")+1);
                    }
                    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[1];
                    objPara[0] = 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);//打开本地文件
         
            }
    文件下载方法调用
  • 相关阅读:
    未授权访问漏洞总结
    常见的端口速查
    Memcache未授权访问漏洞利用及修复
    Ubuntu 16.04 LTS安装Docker
    Ubuntu安装Python2+Python3
    不直接登录SharePoint服务器,通过远程直接部署WSP解决方案包
    SharePoint 2010 人员选择器搜索范围的限定
    SharePoint 2010 匿名访问开启后不能访问Allitems.aspx或DisplayForm.aspx
    博主跑路了
    【pwnable.tw】 alive_note
  • 原文地址:https://www.cnblogs.com/eye-like/p/4914492.html
Copyright © 2011-2022 走看看