Salvare tutti gli allegati di un item su una share di rete
Un esempio di come savare tutti gli allegati di un item di una lista SharePoint su una share di rete.
va richiamata con
C#
private void CopyAllAttachments(string webUrl, string listId, int itemId, string networkPath)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite siteE = new SPSite(webUrl))
{
using (SPWeb webE = siteE.OpenWeb())
{
SPList list = webE.Lists[new Guid(listId)];
SPListItem item = list.GetItemById(itemId);
SPAttachmentCollection attachments = item.Attachments;
if (attachments == null || attachments.Count == 0)
{
//file inesistente o vuoto
throw new FileNotFoundException("File not found: " + networkPath);
}
else
{
foreach (string fileName in attachments)
{
SPFile file = webE.GetFile(attachments.UrlPrefix + fileName);
//path to save
string newFileName = file.Name;
string newFullFileName = System.IO.Path.Combine(networkPath, newFileName);
//copio il file
using (Stream rd = file.OpenBinaryStream())
{
byte[] bytesInStream = new byte[rd.Length];
rd.Read(bytesInStream, 0, (int)bytesInStream.Length);
using (FileStream wr = File.Create(newFullFileName))
{
wr.Write(bytesInStream, 0, bytesInStream.Length);
}
}
}
}
}
}
});
}
C#
CopyAllAttachments("http://intranet.sgart.local", "{8EA52702-AEB3-453E-9303-A5A8033338B7}", 5, @"c:\temp");
CopyAllAttachments("http://intranet.sgart.local", "{8EA52702-AEB3-453E-9303-A5A8033338B7}", 5, @"\\server1\temp");
Se il codice gira all'interno di SharePoint, l'utente dell'application pool deve avere i permessi di scrittura sulla share di rete e/o cartella