【问题标题】:how to upload documents to sharepoint 2007 C#如何将文档上传到sharepoint 2007 C#
【发布时间】:2016-10-07 15:40:16
【问题描述】:

我无法访问 Sharepoint 服务器,只能访问网页中的标准用户。我可以在那里手动上传我的文件。我试图通过 C# 来解决它,并从网络中的示例中完成任何代码。我们的 Sharepoint 是 2007 年。我的代码运行没有任何错误。我把控制文本放在那里,看看它是否继续。一切运行正常,但在 Sharepoint 页面中没有任何反应,没有上传文档。我不知道为什么它什么都不做:)

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net;



namespace Sharepoint
{
    class Program
 {
        public static void CopyStream(Stream read, Stream write)
        {



            int len; byte[] temp = new byte[1024];

            while ((len = read.Read(temp, 0, temp.Length)) > 0)
            {
                write.Write(temp, 0, len);
             ///   Console.WriteLine("test");
            }



        }



        static void Main(string[] args)
        {




            Uri destUri = new Uri("http://gaja/mBreSKCZ/mreports/sales/reportysales/Test_new.txt");
            using (FileStream inStream = File.OpenRead(@"C:\Users\TK20382\Test_new.txt"))
            {
                WebRequest req = WebRequest.Create(destUri);
                req.Method = "PUT";
                req.Credentials = CredentialCache.DefaultCredentials; // assuming windows Auth
                Console.WriteLine("test");
                Console.ReadKey();
                using (Stream outStream = req.GetRequestStream())
                {
                    CopyStream(inStream, outStream);
                }

            }



        }


    }
}

【问题讨论】:

    标签: c# sharepoint console


    【解决方案1】:

    您缺少HttpWebRequest.GetResponse Method,它基本上调用PUT 请求。此外,如果您的目标是 .NET Framework >=2.0 版本,则可以省略 CopyStream 方法,并且行:

    CopyStream(inStream, outStream);
    

    替换为:

    inStream.CopyTo(outStream);
    

    修改版

    public static string UploadFile(string targetUrl,ICredentials credentials, string sourcePath)
    {
            var request = WebRequest.Create(targetUrl);
            request.Method = "PUT";
            request.Credentials = credentials;
            using (var fileStream = File.OpenRead(sourcePath))
            using (var requestStream = request.GetRequestStream())
            {
                fileStream.CopyTo(requestStream);
            }
            using (var response = request.GetResponse())
            using (var reader = new StreamReader(response.GetResponseStream()))
            {
                return reader.ReadToEnd();
            }
    }
    

    用法

    UploadFile("https://contoso.intranet.com/documents/guide.docx", CredentialCache.DefaultCredentials, @"D:\guide.docx");
    

    也可以使用WebClient.UploadFile Method,如下所示:

    public static void UploadFile(string targeUrl, ICredentials credentials, string fileName)
    {
        using (var client = new WebClient())
        {
            client.Credentials = credentials;
            client.UploadFile(targeUrl, "PUT", fileName);
        }
    }
    

    【讨论】:

    • 感谢您的帮助,两种选择都可以正常工作。托马斯