Télécharger un fichier vers SharePoint via les services web intégrés

Quelle est la meilleure façon de télécharger un fichier vers une bibliothèque de documents sur un serveur SharePoint à travers les services web intégrés que la version WSS 3.0 expose?

suivant les deux réponses initiales...

  • nous avons certainement besoin d'utiliser la couche Service Web car nous ferons ces appels à partir d'applications client distantes.

  • la méthode WebDAV fonctionnerait pour nous, mais nous préférerions être cohérent avec le web méthode d'intégration des services.

Il y a en outre un service web pour télécharger des fichiers, douloureux mais fonctionne tout le temps.

faites-vous référence au service de "copie"? Nous avons eu du succès avec ce service CopyIntoItems méthode. Serait-ce la façon recommandée de télécharger un fichier vers les bibliothèques de documents en utilisant uniquement l'API de service web de WSS?

j'ai posté notre code comme réponse suggérée.

31
demandé sur Andy McCluggage 2008-08-28 12:53:00

7 réponses

exemple d'utilisation du service Web "copier" WSS pour télécharger un document dans une bibliothèque...

public static void UploadFile2007(string destinationUrl, byte[] fileData)
{
    // List of desination Urls, Just one in this example.
    string[] destinationUrls = { Uri.EscapeUriString(destinationUrl) };

    // Empty Field Information. This can be populated but not for this example.
    SharePoint2007CopyService.FieldInformation information = new 
        SharePoint2007CopyService.FieldInformation();
    SharePoint2007CopyService.FieldInformation[] info = { information };

    // To receive the result Xml.
    SharePoint2007CopyService.CopyResult[] result;

    // Create the Copy web service instance configured from the web.config file.
    SharePoint2007CopyService.CopySoapClient
    CopyService2007 = new CopySoapClient("CopySoap");
    CopyService2007.ClientCredentials.Windows.ClientCredential = 
        CredentialCache.DefaultNetworkCredentials;
    CopyService2007.ClientCredentials.Windows.AllowedImpersonationLevel = 
        System.Security.Principal.TokenImpersonationLevel.Delegation;

    CopyService2007.CopyIntoItems(destinationUrl, destinationUrls, info, fileData, out result);

    if (result[0].ErrorCode != SharePoint2007CopyService.CopyErrorCode.Success)
    {
        // ...
    }
}
17
répondu Andy McCluggage 2014-04-28 19:00:41

une autre option est D'utiliser le simple' HTTP PUT:

WebClient webclient = new WebClient();
webclient.Credentials = new NetworkCredential(_userName, _password, _domain);
webclient.UploadFile(remoteFileURL, "PUT", FilePath);
webclient.Dispose();

où remoteFileURL pointe vers votre bibliothèque SharePoint...

9
répondu Jim Harte 2008-09-04 22:48:48

Il ya un couple de choses à prendre en compte:

  • reçu.Copiintoitems nécessite que le document soit déjà présent sur un serveur. Le document est passé comme paramètre de l'appel webservice, ce qui limitera la taille du document. (Voir http://social.msdn.microsoft.com/Forums/en-AU/sharepointdevelopment/thread/e4e00092-b312-4d4c-a0d2-1cfc2beb9a6c)
  • la méthode 'http put' (c'est-à-dire webdav...) ne placez le document dans le bibliothèque, mais pas de définir des valeurs de champ
  • pour mettre à jour les valeurs des champs, vous pouvez appeler des listes.UpdateListItem après le 'http put'
  • les bibliothèques de documents peuvent avoir des répertoires, vous pouvez les faire avec 'http mkcol'
  • vous pouvez vérifier les fichiers avec des listes.CheckInFile
  • vous pouvez également créer un service Web personnalisé qui utilise L'API SPxxx .Net, mais ce nouveau service web devra être installé sur le serveur. Cela pourrait sauver des voyages vers le serveur.
8
répondu Erik Erkelens 2011-06-28 16:48:44
public static void UploadFile(byte[] fileData) {
  var copy = new Copy {
    Url = "http://servername/sitename/_vti_bin/copy.asmx", 
    UseDefaultCredentials = true
  };

  string destinationUrl = "http://servername/sitename/doclibrary/filename";
  string[] destinationUrls = {destinationUrl};

  var info1 = new FieldInformation
                {
                  DisplayName = "Title", 
                  InternalName = "Title", 
                  Type = FieldType.Text, 
                  Value = "New Title"
                };

  FieldInformation[] info = {info1};
  var copyResult = new CopyResult();
  CopyResult[] copyResults = {copyResult};

  copy.CopyIntoItems(
    destinationUrl, destinationUrls, info, fileData, out copyResults);
}

NOTE: changer le 1er paramètre de CopyIntoItems pour le nom de fichier, Path.GetFileName(destinationUrl), fait disparaître le message de non-connexion.

6
répondu Luke Hutton 2013-01-04 19:41:17

j'ai eu de la chance en utilisant la classe doclibhelper wrapper décrite ici:http://geek.hubkey.com/2007/10/upload-file-to-sharepoint-document.html

4
répondu Eugene Katz 2008-08-30 02:14:02

à Partir d'un collègue au travail:

paresseux: votre interface WebDAV du système de fichiers Windows. C'est une mauvaise solution programmatique car elle repose sur le service WindowsClient qui tourne sur votre système D'exploitation, et ne fonctionne que sur les sites Web qui tournent sur le port 80. Mappez un lecteur à la bibliothèque de documents et obtenez avec la copie de fichier.

il y a en outre un service web pour télécharger des fichiers, douloureux mais fonctionne tout le temps.

je crois que vous êtes en mesure de télécharger des fichiers via L'API FrontPage mais je ne connais personne qui l'utilise réellement.

1
répondu Ben Scheirman 2008-08-28 14:59:12

Je ne sais pas exactement quel service web utiliser, mais si vous êtes dans une position où vous pouvez utiliser L'API SharePoint.net Dlls, puis en utilisant le SPList et SPLibrary.Article.Ajouter, c'est vraiment facile.

1
répondu Daniel O 2008-08-28 22:48:39