2009-02-27 104 views
9

您好我有以下一段代码将文件上传到Sharepoint。它使用HTTP PUT:使用HTTP将文件上传到Sharepoint(WSS 3.0)文档库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; 
      } 
     } 

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

"The remote server returned an error: (409) Conflict."

没有人有任何想法,我要去的地方错了吗?

感谢,

亚历

+0

我刚刚遇到了同样的问题 - 请检查网址是否有效! – Rashack 2009-09-29 12:54:16

+0

C#noob问:CopyStream从哪里来? – 2011-09-27 17:56:48

+2

这是CopyRiver的一个分支 – Amicable 2012-07-03 14:53:53

回答

8

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

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

0

是否有paticular原因,你不能只使用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); 
} 
0

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

您可能希望检查变量“destUri”以查看它是否指向完全预期的共享点列表。

我的情况是我首先创建了一个文档库“Requrements”,有一个错字错误,于是我将标题改为“Requirements”。你应该注意到,sharepoint仍然保持这个列表的URL为http://server:port/Requrements

这是一个exeption。希望它有帮助。

1

尝试:

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); 
} 
1

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

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

我的意图是1)上传文档,2)设置文档的元数据。 1)和2)通过单独的HTTP调用发生。理想情况下,我想在一次通话中做到这一点,但我不知道如何做到这一点。

要做到这一点,1)成功,所以文档出现在库中。然后当我尝试更新元数据时,那是当我得到409错误。

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

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

相关问题