J'essaye de télécharger des fichiers dans un dossier en utilisant SharePoint et C#.Télécharger des fichiers pour partager un point en utilisant C#
J'ai réussi à créer des dossiers avec mon code et cela fonctionne très bien.
C'est ma classe de document:
[DataContractAttribute]
public class Document
{
[DataMemberAttribute]
public string Name { get; set; }
[DataMemberAttribute]
public byte[] Content { get; set; }
[DataMemberAttribute]
public bool ReplaceExisting { get; set; }
[DataMemberAttribute]
public string Folder { get; set; }
[DataMemberAttribute]
public Dictionary<string, object> Properties { get; set; }
public Document()
{
Properties = new Dictionary<string, object>();
}
public Document(string name, byte[] content)
{
Name = name;
ReplaceExisting = false;
Content = content;
Properties = new Dictionary<string, object>();
}
public Document(string name, byte[] content, bool replace)
{
Name = name;
Content = content;
ReplaceExisting = replace;
Properties = new Dictionary<string, object>();
}
}
Et c'est la classe où je l'utilise pour télécharger des fichiers (documents) dans un dossier de point de partage existant:
public class SharePointHandler : IDisposable
{
private static string sharePointSite = "My Site";
private static string documentLibraryName = "Root folder";
public SharePointHandler() { }
public void Upload(List<Document> documents, string company, int year, string quarter)
{
string Year = year.ToString();
try
{
using (ClientContext context = new ClientContext(sharePointSite))
{
var list = context.Web.Lists.GetByTitle(documentLibraryName);
context.Load(list);
var root = list.RootFolder;
context.Load(root);
context.ExecuteQuery();
.
.
.
foreach (var document in documents)
{
var fileCreationInformation = new FileCreationInformation();
fileCreationInformation.Content = document.Content;
fileCreationInformation.Overwrite = true;
fileCreationInformation.Url = list.RootFolder.ServerRelativeUrl + "/" + company + "/" + Year + "/" + quarter + "/" + document.Name;
Microsoft.SharePoint.Client.File uploadFile = quarterFolder.Files.Add(fileCreationInformation);
foreach (KeyValuePair<string, object> property in document.Properties)
uploadFile.ListItemAllFields[property.Key] = property.Value;
try
{
uploadFile.CheckOut();
context.ExecuteQuery();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
uploadFile.ListItemAllFields.Update();
context.ExecuteQuery();
uploadFile.CheckIn("", CheckinType.MajorCheckIn);
context.ExecuteQuery();
}
}
}
catch (Exception ex)
{
EventLog.WriteEntry(ex.Message, EventLogEntryType.Error);
return;
}
}
public void Dispose() { }
}
Quand je lance le code que j'ai un document avec:
contenu: {octet [11430]}
dossier: NUL l
Nom: Testing.docx
Propriétés: Count = 0
ReplaceExisting: false
Tout fonctionne bien et je reçois l'URL nécessaire. Mais quand j'arrive à ces commandes:
try
{
uploadFile.CheckOut();
context.ExecuteQuery();
}
Le programme tombe et j'obtiens l'erreur qui dit: Fichier non trouvé.
Qu'est-ce que je fais mal?
Nous vous remercions de votre aide!
Avez-vous essayé de créer un [MCVE] (http://stackoverflow.com/help/mcve)? –
Je ne peux pas le faire en MVC, c'est dans mon lieu de travail. –
Vous obtenez une erreur, car vous essayez de récupérer le fichier avant de le télécharger. Comme il n'existe pas encore, il échoue. Il suffit de supprimer uploadFile.CheckOut(); et ça marchera bien. Si vous souhaitez remplacer un document existant, vous devez trouver ce fichier via une requête, puis remplacer son contenu byte [] si vous souhaitez utiliser CheckOut. –