Download documents with the API

When you create a document within Sitefinity CMS,you can choose to store the actual content of the document in the database, file system, or even in cloud blob storage. Where you store your document depends on the type of storage provider you selected for the particular library. You can retrieve and save the content of the document in another storage or location at a later point of time.

The following example demonstrates how to retrieve the content of an already uploaded Sitefinity CMS document and store it in a physical folder on the server where your web application is hosted. To do so, use the following code:

C#
using System;
using System.IO;
using System.Linq;
using Telerik.Sitefinity.Modules.Libraries;

namespace SitefinityWebApp
{
    public partial class DownloadSitefinityDocs : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var librariesManager = LibrariesManager.GetManager();
            var document = librariesManager.GetDocuments().FirstOrDefault(x => x.Title == "TestDocument");
            this.DownloadDocument(document.Id, "~/App_Data/MyDocuments");
        }

        public void DownloadDocument(Guid documentId, string relativePath)
        {
            var librariesManager = LibrariesManager.GetManager();
            var document = librariesManager.GetDocument(documentId);

            if (document != null)
            {
                using (var stream = librariesManager.Download(document))
                {
                    // Map the relative path where the document is going to be downloaded
                    // to the corresponding physical path and include the document name and extension.
                    var physicalPath = this.Server.MapPath(relativePath);
                    var documentName = string.Concat(document.Title, document.Extension);
                    var fullPath = Path.Combine(physicalPath, documentName);

                    this.SaveStreamToFile(stream, fullPath);
                }
            }
        }

        public void SaveStreamToFile(Stream stream, string filePath)
        {
            // Convert the document stream into a byte array
            // and write its content to a file
            var bytesInStream = new byte[stream.Length];
            stream.Read(bytesInStream, 0, bytesInStream.Length);
            File.WriteAllBytes(filePath, bytesInStream);
        }
    }
}

In the code above, you:

  1. Get an instance of the LibrariesManagerclass and retrieve a document by its ID.
  2. Use the Downloadmethod of the library manager to retrieve a stream with the content of the document.
  3. Compose the physical path where the document is going to be saved. Finally, you r
  4. Read the byte array representation of the document stream and write it to a file with the specified path.
Want to learn more?
Enhance your Sitefinity skills by enrolling in free training sessions. Become Sitefinity certified through Progress Education Community to strengthen your professional credentials.
New to Sitefinity?