9

嗨,我有以下代码可以将文件上传到 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)冲突。”

有人对我哪里出错有任何想法吗?

谢谢,

亚历克斯

4

6 回答 6

8

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

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

于 2010-04-18T20:54:09.420 回答
1

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

我发现这个例子可能会让你开始http://geek.hubkey.com/2007/11/upload-file-to-sharepoint-document.html

于 2009-02-27T21:46:45.257 回答
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);
}
于 2010-05-31T18:44:28.077 回答
1

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

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

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

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

I'm pretty sure that I first need to insert a step in between 1) and 2) which first downloads the document's list (or manifest) which would in theory contain the needed versioning information. All I would need to do is set the metadata fields I need, and send back to the server.

No, we don't want to use the Sharepoint API because there are no libraries for it in Java. ;-)

于 2010-06-24T20:10:27.130 回答
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);
}
于 2009-03-02T02:08:22.567 回答
0

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

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

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

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

于 2009-08-10T10:21:38.430 回答