Загрузка файлов в библиотеку документов Sharepoint (WSS 3.0) с использованием HTTP PUT - PullRequest
9 голосов
/ 27 февраля 2009

Привет У меня есть следующий фрагмент кода для загрузки файла на 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) Конфликт."

У кого-нибудь есть идеи относительно того, где я иду не так?

Спасибо

Alex

Ответы [ 6 ]

8 голосов
/ 19 апреля 2010

У меня была эта проблема, когда я ссылался на URL библиотеки документов, а не на сам файл назначения.

т.е. попробуйте http://server имя / имя библиотеки документов / новый файл name.doc

1 голос
/ 25 июня 2010

Я еще не решил свою проблему, поэтому я здесь, но я знаю, почему вы получаете эту ошибку.

Ошибка возникает из-за того, что вы не устанавливаете скрытое, но обязательное поле. В моем случае у меня не было столбцов, и, конечно же, ни одного из них не требовалось. Однако существует поле контроля версий, которое находится в конфликте.

Мое намерение состоит в том, чтобы 1) загрузить документ и 2) установить метаданные документа. 1) и 2) происходят через отдельные HTTP-вызовы. В идеале я хочу сделать это за один звонок, но я не знаю, как это сделать.

Для этого 1) успешно, поэтому документ появляется в библиотеке. Затем, когда я пытаюсь обновить метаданные, я получаю ошибку 409.

Я почти уверен, что сначала мне нужно вставить шаг между 1) и 2), который сначала загружает список (или манифест) документа, который теоретически должен содержать необходимую информацию о версиях. Все, что мне нужно сделать, это установить необходимые поля метаданных и отправить их обратно на сервер.

Нет, мы не хотим использовать API Sharepoint, потому что в Java нет библиотек для него. ; -)

1 голос
/ 31 мая 2010

Попробуйте:

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 голос
/ 28 февраля 2009

Понятия не имею. Но почему вы не используете удаленные вызовы процедур (RPC), вот как я обычно это делаю.

Я нашел этот пример, с которого можно начать http://geek.hubkey.com/2007/11/upload-file-to-sharepoint-document.html

0 голосов
/ 10 августа 2009

Alex, Это случилось со мной тоже. Вероятно, вам следует создать еще одну освещенную или библиотеку документов и загрузить в нее файлы для проверки.

Возможно, вы захотите проверить переменную "destUri", чтобы увидеть, указывает ли она точно на ожидаемый список sharepoint.

В моей ситуации я сначала создал библиотеку документов "Requrements", произошла опечатка, затем я изменил название на "Требования". Вы должны заметить, что sharepoint по-прежнему сохраняет URL-адрес этого списка как http://server:port/Requrements

Это исключение. Надеюсь, это поможет.

0 голосов
/ 02 марта 2009

Есть ли особая причина, по которой вы не можете просто использовать API Sharepoint (например, 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...