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.
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)
{
// ...
}
}
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...
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.
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.
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
à 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.
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.