Comment télécharger un fichier dans une bibliothèque de documents dans sharepoint?
Comment télécharger un fichier par programme dans une bibliothèque de documents dans sharepoint?
Je fais actuellement une application Windows en utilisant C# qui va ajouter des documents à une liste de bibliothèque de documents.
5 réponses
Vous pouvez télécharger des documents dans des bibliothèques SharePoint à l'aide du modèle objet ou SharePoint Webservices.
Télécharger en utilisant le modèle D'objet:
String fileToUpload = @"C:\YourFile.txt";
String sharePointSite = "http://yoursite.com/sites/Research/";
String documentLibraryName = "Shared Documents";
using (SPSite oSite = new SPSite(sharePointSite))
{
using (SPWeb oWeb = oSite.OpenWeb())
{
if (!System.IO.File.Exists(fileToUpload))
throw new FileNotFoundException("File not found.", fileToUpload);
SPFolder myLibrary = oWeb.Folders[documentLibraryName];
// Prepare to upload
Boolean replaceExistingFiles = true;
String fileName = System.IO.Path.GetFileName(fileToUpload);
FileStream fileStream = File.OpenRead(fileToUpload);
// Upload document
SPFile spfile = myLibrary.Files.Add(fileName, fileStream, replaceExistingFiles);
// Commit
myLibrary.Update();
}
}
Si vous obtenez cette erreur "Valeur n'est pas comprise dans la plage attendue" dans cette ligne:
SPFolder myLibrary = oWeb.Folders[documentLibraryName];
Utilisez plutôt ceci pour corriger l'erreur:
SPFolder myLibrary = oWeb.GetList(URL OR NAME).RootFolder;
Utilisez toujours L'URl pour obtenir des listes ou d'autres parce qu'elles sont uniques, les noms ne sont pas le meilleur moyen ;)
string filePath = @"C:\styles\MyStyles.css";
string siteURL = "http://MyDomain.net/";
string libraryName = "Style Library";
using (SPSite oSite = new SPSite(siteURL))
{
using (SPWeb oWeb = oSite.OpenWeb())
{
if (!System.IO.File.Exists(filePath))
throw new FileNotFoundException("File not found.", filePath);
SPFolder libFolder = oWeb.Folders[libraryName];
// Prepare to upload
string fileName = System.IO.Path.GetFileName(filePath);
FileStream fileStream = File.OpenRead(filePath);
//Check the existing File out if the Library Requires CheckOut
if (libFolder.RequiresCheckout)
{
try {
SPFile fileOld = libFolder.Files[fileName];
fileOld.CheckOut();
} catch {}
}
// Upload document
SPFile spfile = libFolder.Files.Add(fileName, fileStream, true);
// Commit
myLibrary.Update();
//Check the File in and Publish a Major Version
if (libFolder.RequiresCheckout)
{
spFile.CheckIn("Upload Comment", SPCheckinType.MajorCheckIn);
spFile.Publish("Publish Comment");
}
}
}
Comme alternative aux services web, vous pouvez utiliser l'appelput document de L'API RPC FrontPage. Cela a l'avantage supplémentaire de vous permettre de fournir des méta-données (colonnes) dans la même requête que les données du fichier. L'inconvénient évident est que le protocole est un peu plus obscur (par rapport aux webservices très bien documentés).
Pour une application de référence qui explique L'utilisation de FrontPage RPC, consultez le projetSharePad sur CodePlex.
Avec la nouvelle bibliothèque SharePoint 2013, j'ai réussi à faire quelque chose comme ceci:
private void UploadToSharePoint(string p, out string newUrl) //p is path to file to load
{
string siteUrl = "https://myCompany.sharepoint.com/site/";
//Insert Credentials
ClientContext context = new ClientContext(siteUrl);
SecureString passWord = new SecureString();
foreach (var c in "mypassword") passWord.AppendChar(c);
context.Credentials = new SharePointOnlineCredentials("myUserName", passWord);
Web site = context.Web;
//Get the required RootFolder
string barRootFolderRelativeUrl = "Shared Documents/foo/bar";
Folder barFolder = site.GetFolderByServerRelativeUrl(barRootFolderRelativeUrl);
//Create new subFolder to load files into
string newFolderName = baseName + DateTime.Now.ToString("yyyyMMddHHmm");
barFolder.Folders.Add(newFolderName);
barFolder.Update();
//Add file to new Folder
Folder currentRunFolder = site.GetFolderByServerRelativeUrl(barRootFolderRelativeUrl + "/" + newFolderName);
FileCreationInformation newFile = new FileCreationInformation { Content = System.IO.File.ReadAllBytes(@p), Url = Path.GetFileName(@p), Overwrite = true };
currentRunFolder.Files.Add(newFile);
currentRunFolder.Update();
context.ExecuteQuery();
//Return the URL of the new uploaded file
newUrl = siteUrl + barRootFolderRelativeUrl + "/" + newFolderName + "/" + Path.GetFileName(@p);
}