Chargement de fichiers dans la bibliothèque Sharepoint (WSS 3.0) en utilisant HTTP PUT

Salut j'ai le code suivant pour télécharger un fichier vers Sharepoint. Il utilise 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;
            }
        }

quand j'exécute ce code j'obtiens l'exception:

"Le serveur distant a retourné une erreur: (409) Conflit."

quelqu'un a une idée d'où je vais mal?

Merci,

Alex

9
demandé sur taggers 2009-02-27 22:46:50

6 réponses

j'ai eu ce problème quand je faisais référence à l'url de la bibliothèque de document et pas le fichier de destination lui-même.

c'est à dire essayer de http://server nom/document nom de la bibliothèque/nouveau nom de fichier.doc

8
répondu nzkarl 2010-04-18 20:54:09

aucune idée. Mais pourquoi n'utilisez-vous pas les appels de procédure à distance (RPC)?

j'ai trouvé cet exemple qui pourrait vous aider à démarrer http://geek.hubkey.com/2007/11/upload-file-to-sharepoint-document.html

1
répondu Anders Rask 2009-02-27 21:46:45

, Essayez:

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
répondu Marco Dorantes 2011-12-01 02:40:03

je n'ai pas résolu mon problème, c'est pourquoi je suis ici, mais je sais pourquoi vous obtenez cette erreur.

l'erreur résulte du fait que vous ne définissez pas un champ caché, mais requis. Dans mon cas, je n'avais pas de colonnes, et certainement aucun qui étaient nécessaires. Cependant, il y a un domaine de versioning qui est en conflit.

Mon intention est de 1) télécharger le document, et 2) définir les métadonnées du document. 1) et 2) se produisent sur des appels HTTP séparés. Idéalement, Je veux le faire en un seul appel, mais je ne sais pas comment faire.

pour accomplir ceci, 1) réussit, ainsi le document apparaît dans la bibliothèque. Puis quand j'essaie de mettre à jour les métadonnées, c'est là que j'obtiens l'erreur 409.

je suis assez sûr que j'ai d'abord besoin d'insérer une étape entre 1) et 2) qui télécharge d'abord la liste du document (ou manifeste) qui, en théorie, contiendrait les informations de version nécessaires. Tous j'aurais besoin de faire est de mettre les champs de métadonnées dont j'ai besoin, et les renvoyer au serveur.

Non, Nous ne voulons pas utiliser L'API Sharepoint car il n'y a pas de bibliothèques pour cela en Java. ;- )

1
répondu Wigwam 2011-12-01 02:41:52

y a-t-il une raison paticulaire pour laquelle vous ne pouvez pas simplement utiliser L'API Sharepoint (par ex. SPFolder.Fichier.Ajouter) pour télécharger le fichier? Comme suit:

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
répondu mundeep 2009-03-02 02:08:22

Alex, Ce qui est arrivé à moi aussi. Vous devriez probablement créer un autre lit ou une autre bibliothèque de documents et télécharger des fichiers dans elle pour tester.

vous pouvez vérifier la variable" destUri " pour voir si elle pointe exactement sur la liste attendue sharepoint.

Ma situation est que j'ai d'abord créé une bibliothèque de documents" Requrements", il y a une erreur typographique, puis j'ai changé le titre en"Requirements". Vous devriez noter que sharepoint garde toujours L'URL à cette liste comme http://server:port/Requrements

c'est une exception. Espérons que cela aide.

0
répondu tata9999 2009-08-10 10:21:38