【问题标题】:Uploading files to Sharepoint (WSS 3.0) document library using HTTP PUT使用 HTTP PUT 将文件上传到 Sharepoint (WSS 3.0) 文档库
【发布时间】:2010-10-10 10:13:34
【问题描述】:

您好,我有以下代码可以将文件上传到 Sharepoint。它使用 HTTP PUT:

public static string UploadFile(string destUrl, string sourcePath)
        {
            try
            {
                Uri destUri = new Uri(destUrl);
                FileStream inStream = File.OpenRead(sourcePath);
                WebRequest req = WebRequest.Create(destUri);
                req.Method = "PUT";
                req.Headers.Add("Overwrite", "F");
                req.Timeout = System.Threading.Timeout.Infinite;
                req.Credentials = CredentialCache.DefaultCredentials;
                Stream outStream = req.GetRequestStream();
                string status = CopyStream(inStream, outStream);
                if (status == "success")
                {
                    outStream.Close();
                    WebResponse ores = req.GetResponse();
                    return "success";
                }
                else
                {
                    return status;
                }
            }
            catch (WebException we)
            {
            return we.Message;
            }
            catch (System.Exception ee)
            {
            return ee.Message;
            }
        }

当我运行这段代码时,我得到了异常:

“远程服务器返回错误:(409) Conflict。”

有人知道我哪里出错了吗?

谢谢,

亚历克斯

【问题讨论】:

  • 我刚刚遇到了同样的问题 - 检查网址是否有效!
  • C#菜鸟问:CopyStream从何而来?
  • 它是 CopyRiver 的一个分支
  • CopyStream方法从何而来?

标签: c# sharepoint http upload


【解决方案1】:

我在引用文档库的 url 而不是目标文件本身时遇到了这个问题。

即试试http://server名称/文档库名称/新文件名.doc

【讨论】:

  • 我遇到了同样的问题,您的解决方案完美运行。简单高效。
【解决方案2】:

没有线索。但是你为什么不使用远程过程调用(RPC),我通常是这样做的。

我发现这个例子可以帮助你入门http://geek.hubkey.com/2007/11/upload-file-to-sharepoint-document.html

【讨论】:

    【解决方案3】:

    试试:

    void StorePlainFile(string target_url, string filename, byte[] file_bytes)
    {
          string url = target_url + "/" + filename;
          System.Net.WebClient client = new System.Net.WebClient();
          client.Credentials = System.Net.CredentialCache.DefaultCredentials;
          client.Headers.Add("Overwrite", "F");
          byte[] response = client.UploadData(url, "PUT", file_bytes);
    }
    

    【讨论】:

      【解决方案4】:

      我还没有解决我的问题,这就是我在这里的原因,但我知道你为什么会收到这个错误。

      导致错误是因为您没有设置隐藏但必需的字段。就我而言,我没有列,当然也没有必要的列。但是,有一个版本控制字段存在冲突。

      我的意图是 1) 上传文档,以及 2) 设置文档的元数据。 1) 和 2) 发生在单独的 HTTP 调用上。理想情况下,我想在一次调用中执行此操作,但我不知道如何执行此操作。

      为此,1) 成功,因此文档出现在库中。然后,当我尝试更新元数据时,就会出现 409 错误。

      我很确定我首先需要在 1) 和 2) 之间插入一个步骤,该步骤首先下载理论上包含所需版本信息的文档列表(或清单)。我需要做的就是设置我需要的元数据字段,然后发送回服务器。

      不,我们不想使用 Sharepoint API,因为 Java 中没有用于它的库。 ;-)

      【讨论】:

        【解决方案5】:

        是否存在不能仅使用 Sharepoint API(例如 SPFolder.Files.Add)上传文件的特殊原因?如下:

        http://msdn.microsoft.com/en-us/library/ms454491.aspx

        public void UploadFile(string srcUrl, string destUrl)
        {
            if (! File.Exists(srcUrl))
            {
                throw new ArgumentException(String.Format("{0} does not exist", 
                    srcUrl), "srcUrl");
            }
        
            SPWeb site = new SPSite(destUrl).OpenWeb();
        
            FileStream fStream = File.OpenRead(srcUrl);
            byte[] contents = new byte[fStream.Length];
            fStream.Read(contents, 0, (int)fStream.Length);
            fStream.Close(); 
        
            EnsureParentFolder(site, destUrl);
            site.Files.Add(destUrl, contents);
        }
        

        【讨论】:

        • 这种方法不需要在服务器上运行代码吗?我认为问题在于通过 http 发布。
        【解决方案6】:

        亚历克斯, 这也发生在我身上。您可能应该创建另一个照明或文档库并将文件上传到其中进行测试。

        您可能需要检查变量“destUri”以查看它是否准确指向预期的共享点列表。

        我的情况是我首先创建了一个文档库“需求”,有一个拼写错误,然后我将标题改为“需求”。您应该注意到 sharepoint 仍然将此列表的 URL 保留为 http://server:port/Requrements

        这是一个例外。希望对您有所帮助。

        【讨论】:

          猜你喜欢
          • 2010-11-06
          • 2013-12-12
          • 1970-01-01
          • 1970-01-01
          • 2016-12-06
          • 2013-10-08
          • 1970-01-01
          • 2011-02-21
          • 2011-08-25
          相关资源
          最近更新 更多