×

WEBDAV的上传、下载、删除、新建文件夾、列表的代码(C#)

Kalet Kalet 发表于2017-03-01 17:31:46 浏览512 评论0

抢沙发发表评论

windows server 2003开启webDAV服务

 

1、 启动“IIS管理器”选择“WEB服务扩展”,选择“WEBDAV”的允许按钮启动WEBDAV功能

 

2、建立一个虚拟目录,对应到一个本地目录。

 

3、启动系统“服务”中的“WebClient”服务

 

参考网址

WebDAV文档rfc2518    http://www.ietf.org/rfc/rfc2518.txt

webdav常用方法和概念总结   http://blog.csdn.net/mahongming/archive/2007/09/10/1779033.aspx 

在C#中通过webdav操作exchange    http://www.cnblogs.com/umlchina/archive/2005/04/25/144768.html

 

 

 

        

      //--------------WebDAV上传代码-----

        private void upload()

        {
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://10.57.144.2/WebDAV/IMS對外教育訓練PPTnew.pdf");
            req.Credentials = new NetworkCredential("username", "password");//用户名,密码   //CredentialCache.DefaultCredentials使用默认的认证
            req.PreAuthenticate = true;
            req.Method = "PUT";
            req.AllowWriteStreamBuffering = true;

            // Retrieve request stream 
            Stream reqStream = req.GetRequestStream();

            // Open the local file
            FileStream rdr = new FileStream("C://IMS對外教育訓練PPTnew.pdf", FileMode.Open);

            // Allocate byte buffer to hold file contents
            byte[] inData = new byte[4096];

            // loop through the local file reading each data block
            //  and writing to the request stream buffer
            int bytesRead = rdr.Read(inData, 0, inData.Length);
            while (bytesRead > 0)
            {
                reqStream.Write(inData, 0, bytesRead);
                bytesRead = rdr.Read(inData, 0, inData.Length);
            }

            rdr.Close();
            reqStream.Close();

            req.GetResponse();

 

             //也可以用以下的方式

            /*  System.Uri myURi = new System.Uri("http://10.57.144.2/WebDAV/hello.doc");
              FileStream inStream = File.OpenRead("C://timeTest.doc");  
 
            WebRequest req = WebRequest.Create(myURi);
            req.Method = "PUT";
              req.Timeout = System.Threading.Timeout.Infinite;
 
              req.Credentials = CredentialCache.DefaultCredentials;
              Stream outStream = req.GetRequestStream();
 
              //CopyStream(inStream, outStream);
              byte[] inData = new byte[4096];
              int bytesRead = inStream.Read(inData, 0, inData.Length);
              while (bytesRead > 0)
              {
                  outStream.Write(inData, 0, bytesRead);
                  bytesRead = inStream.Read(inData, 0, inData.Length);
              }
              inStream.Close();
              outStream.Close();
              req.GetResponse();*/

        }

 

        //--------------WebDAV下载代码-----

        private void WebDAVGet_Click(object sender, EventArgs e)
        {
            System.Uri myURi = new System.Uri(@"http://10.57.144.2/WebDAV/hello.doc");
            string sfilePath = "C://hello.doc";

            WebRequest req = WebRequest.Create(myURi);
            req.Method = "GET";
            req.Timeout = System.Threading.Timeout.Infinite;
            req.Credentials = CredentialCache.DefaultCredentials;
            WebResponse res = req.GetResponse();
            Stream inStream = res.GetResponseStream();

            FileStream fs = new FileStream(sfilePath, FileMode.OpenOrCreate);

            byte[] inData = new byte[4096];
            int bytesRead = inStream.Read(inData, 0, inData.Length);
            while (bytesRead > 0)
            {
                fs.Write(inData, 0, bytesRead);
                bytesRead = inStream.Read(inData, 0, inData.Length);
            }

            fs.Close();

            inStream.Close();
        }

 

 

       //--------------WebDAV删除代码-----

        private void WebDAVDel_Click(object sender, EventArgs e)
        {
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(@"http://10.57.144.2/WebDAV/Powerpoint.pptx");
            //req.Credentials = new NetworkCredential("Administrator", "123456");
            req.PreAuthenticate = true;
            req.Method = "DELETE";
            //req.AllowWriteStreamBuffering = true;

            req.GetResponse();
        }

 

 

        //--------------WebDAV列出文件夹文件列表代码-----

        private void WebDAVList_Click(object sender, EventArgs e)
        {
            
            try
            {

                MSXML2.XMLHTTP30 oXMLHttp = new MSXML2.XMLHTTP30();    //需要增加Microsoft.XML 6.0  COM

                String sUrl = "http://10.57.144.2/WebDAV/";

                string strXml;
                strXml = "<?xml version=/"1.0/"?> ";
                strXml += "<d:propfind xmlns:d=/"DAV:/" xmlns:o=/"urn:schemas-microsoft-com:office:office/">";
                strXml += "<d:prop>";
                strXml += "<d:displayname/>";       //名称
                strXml += "<d:getcontentlength/>";    //大小
                strXml += "<d:iscollection/>";     //是否文件夹
                strXml += "<d:getlastmodified/>";   //最后修改时间
                strXml += "</d:prop>";
                strXml += "</d:propfind>";

 

                /*strXml = "<?xml version=/"1.0/" encoding=/"utf-8/" ?>";
                strXml += "<D:propfind xmlns:D=/"DAV:/">";
                strXml += "<D:allprop/>";     //列出所有的属性
                strXml += "</D:propfind>";*/

 

 

                oXMLHttp.open("PROPFIND", sUrl, false, "administrator", "drm.123");

                oXMLHttp.setRequestHeader("Content-Type", "text/xml");
                oXMLHttp.setRequestHeader("Translate", "f");

                //Console.WriteLine(sQuery.Length);
                Console.WriteLine(strXml);
                oXMLHttp.send(strXml);

                Console.WriteLine(oXMLHttp.status);
                Console.WriteLine(oXMLHttp.statusText);
                File.WriteAllBytes(@"C:/list.xml", Encoding.UTF8.GetBytes(oXMLHttp.responseText));

 

 

               //对返回的xml文件进行解析,取出所需属性
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(oXMLHttp.responseText);


                XmlNode root = doc.DocumentElement;
                System.Collections.IEnumerator ienum = root.GetEnumerator();
                XmlNode book;
                while (ienum.MoveNext())
                {
                    book = (XmlNode)ienum.Current;
                    book = book.ChildNodes[1].ChildNodes[1];
                    System.Collections.IEnumerator ienum2 = book.GetEnumerator();
                    while (ienum2.MoveNext())
                    {
                        XmlNode node = (XmlNode)ienum2.Current;
                        Console.Write(node.InnerXml);
                        Console.Write("-");
                    }
                    //Console.WriteLine(book.OuterXml);
                    //Console.WriteLine(book.InnerXml);
                    Console.WriteLine();
                }


            }
            catch (Exception ex)
            {
                Console.WriteLine("{0} Exception caught.", ex);
            }

        }

 

 

      //----新建文件夾----

       private void WebDAVNewFolder_Click(object sender, EventArgs e)
        {
            try
            {
                // Create the HttpWebRequest object. 
                HttpWebRequest objRequest = (HttpWebRequest)HttpWebRequest.Create(@"http://10.57.144.2/WebDAV/new");
                // Add the network credentials to the request. 
                objRequest.Credentials = new NetworkCredential("F3226142", "drm.123");//用户名,密码
                // Specify the method. 
                objRequest.Method = "MKCOL";

                HttpWebResponse objResponse = (System.NET.HttpWebResponse)objRequest.GetResponse();

                // Close the HttpWebResponse object. 
                objResponse.Close();

            }
            catch (Exception ex)
            {
                throw new Exception("Can't create the foder" + ex.ToString());
            }             
        }

群贤毕至

访客