您好我有以下代码将文件上传到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)冲突。”
有没有人对我出错的地方有任何想法?
谢谢,
亚历
答案 0 :(得分:8)
当我引用文档库的url而不是目标文件本身时,我遇到了这个问题。
即。尝试http://server名称/文档库名称/新文件名.doc
答案 1 :(得分:1)
毫无头绪。但是,为什么不使用远程过程调用(RPC),这就是我通常的做法。
我发现这个例子可能会让你开始http://geek.hubkey.com/2007/11/upload-file-to-sharepoint-document.html
答案 2 :(得分: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);
}
答案 3 :(得分:1)
我还没有解决我的问题,这就是为什么我在这里,但我知道你为什么会收到这个错误。
错误的结果是因为您没有设置隐藏但必需的字段。就我而言,我没有专栏,当然也没有专栏。但是,有一个版本控制字段存在冲突。
我的目的是1)上传文档,2)设置文档的元数据。 1)和2)通过单独的HTTP调用发生。理想情况下,我想在一次通话中执行此操作,但我不知道如何执行此操作。
要完成此操作,1)成功,因此文档将显示在库中。然后,当我尝试更新元数据时,就是当我收到409错误时。
我很确定我首先需要在1)和2)之间插入一个步骤,首先下载文档的列表(或清单),理论上它包含所需的版本信息。我需要做的就是设置我需要的元数据字段,然后发送回服务器。
不,我们不想使用Sharepoint API,因为Java中没有它的库。 ; - )
答案 4 :(得分:0)
是否有特殊原因您不能仅使用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);
}
答案 5 :(得分:0)
亚历克斯, 这也发生在我身上。您可能应该创建另一个lit或文档库并将文件上传到其中进行测试。
您可能需要检查变量“destUri”,看它是否指向预期的共享点列表。
我的情况是我首先创建了一个文档库“Requrements”,有一个错误的错误,然后我将标题改为“要求”。您应该注意到,sharepoint仍将此列表的网址保留为http://server:port/Requrements
这是一个例外。希望它有所帮助。