使用HTTP PUT将文件上载到Sharepoint(WSS 3.0)文档库

嗨,我有以下代码将文件上传到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; } } 

当我运行此代码时,我得到了exception:

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

有没有人对我出错的地方有任何想法?

谢谢,

亚历克斯

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

即尝试http://服务器名称/文档库名称/新文件名.doc

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

我找到了这个可能让你入门的例子http://geek.hubkey.com/2007/11/upload-file-to-sharepoint-document.html

尝试:

 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)上传文档,2)设置文档的元数据。 1)和2)通过单独的HTTP调用发生。 理想情况下,我想在一次通话中执行此操作,但我不知道如何执行此操作。

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

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

不,我们不想使用Sharepoint API,因为Java中没有库。 😉

是否有一个特殊的原因你不能只使用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); } 

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

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

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

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