SharePoint 2007 & File Upload

En av de saker jag inte hann med att visa på "Innovation Day: SharePoint 2007" var hur man kan skicka upp en fil via en webbtjänst till SharePoint 2007.

En finess med att SharePoint 2007 bygger på ASP.NET 2.0 är att vi enkelt kan lägga till funktionalitet som baseras på samma teknik.

Ett exempel är att skapa en egen ASP.NET 2.0 Web Service som använder objektmodellen i SharePoint 2007 för att lägga till en fil i en lista.

För att åstadkomma detta gör följande:

  1. Skapa ett ASP.NET 2.0 Web Service -projekt i VS 2005.
  2. Lägg till en referens till komponenten "Windows.SharePoint.Services"
  3. Skapa en webbmetod enligt koden nedan.
  4. Bygg och kopiera koden till en katalog i root:en på din website för SharePoint 2007. Exempelvis "C:\Inetpub\wwwroot\wss\VirtualDirectories\80" som är standardinstallationen av WSS 3.0.
  5. Skapa en Windowsapplikation som sak anropa denna service.
  6. Lägg till en webbreferens till din service.
  7. Lägg till anrop som skickar upp filen enligt koden nedan.

Web Service

[WebMethod]
public string UploadDocument(string fileName, byte[] fileContents, string pathFolder)
{
if (fileContents == null)
{
return "Null Attachment"
}
try
{
int iStartIndex = pathFolder.LastIndexOf("/");
string sitePath = pathFolder.Remove(iStartIndex);
string folderName = pathFolder.Substring(iStartIndex + 1);

SPSite site = new SPSite(sitePath);
SPWeb web = site.OpenWeb();

SPFolder folder = web.GetFolder(folderName);

string fileURL = fileName;

folder.Files.Add(fileURL, fileContents);

folder.Update();

return "File added successfully!"

}
catch (System.Exception ex)
{
return ex.Source + ":" + ex.Message;
}
}

WindowsApplikation

try
{
WindowsApplication1.upload.upload oUploader = new WindowsApplication1.upload.upload();

oUploader.PreAuthenticate = true;
oUploader.Credentials = CredentialCache.DefaultCredentials;

string strPath = @"C:\homepage.gif"
string strFile = strPath.Substring(strPath.LastIndexOf("\\") + 1);

string strDestination = https://localhost/Shared%20Documents

FileStream fStream = new FileStream(strPath, System.IO.FileMode.Open);
byte[] binFile = new byte[(int)fStream.Length];
fStream.Read(binFile, 0, (int)fStream.Length);
fStream.Close();

string str = oUploader.UploadDocument(strFile, binFile, strDestination);
MessageBox.Show(str);

}
catch (Exception ex)
{
MessageBox.Show(ex.Source + " - " + ex.Message + " - " + ex.InnerException + " - " + ex.StackTrace);
}