---
title: Work with media
slug: cms-11/dev-docs/working-with-media
docTags: 
createdAt: 2026-07-22T19:45:18.312Z
---

Media (such as files) are treated as any other content type but have associated binary data stored using BLOB providers, which Optimizely Content Management System (CMS) optimizes for storing data streams.

**Examples**

Define a simple content type that is used in the examples that follow it:

```csharp
[ContentType]
public class GenericFile: MediaData {
  public string Description {
    get;
    set;
  }
}
```

Create a file and defines a simple text file with the message *Hello world*:

```csharp
public void Uploading_a_file() {
  var contentRepository = ServiceLocator.Current.GetInstance<IContentRepository>();
  var blobFactory = ServiceLocator.Current.GetInstance<IBlobFactory>();

  //Get a new empty file data
  var file1 = contentRepository.GetDefault<GenericFile>(SiteDefinition.Current.GlobalAssetsRoot);
  file1.Name = "Readme.txt";

  //Create a blob in the binary container
  var blob = blobFactory.CreateBlob(file1.BinaryDataContainer, ".txt");
  using(var s = blob.OpenWrite()) {
    StreamWriter w = new StreamWriter(s);
    w.WriteLine("Hello world");
    w.Flush();
  }

  //Assign to file and publish changes
  file1.BinaryData = blob;
  var file1ID = contentRepository.Save(file1, SaveAction.Publish);
}
```

Create a location where the actual file type is resolved during runtime from extension:

```csharp
public void Uploading_a_media_from_extension() {
  var contentRepository = ServiceLocator.Current.GetInstance<IContentRepository>();
  var contentTypeRepository = ServiceLocator.Current.GetInstance<IContentTypeRepository>();
  var mediaDataResolver = ServiceLocator.Current.GetInstance<ContentMediaResolver>();
  var blobFactory = ServiceLocator.Current.GetInstance<IBlobFactory>();

  //Get a suitable MediaData type from extension
  var mediaType = mediaDataResolver.GetFirstMatching(".txt");
  var contentType = contentTypeRepository.Load(mediaType);

  //Get a new empty file data
  var media = contentRepository.GetDefault<MediaData>(SiteDefinition.Current.GlobalAssetsRoot, contentType.ID);
  media.Name = "Readme.txt";

  //Create a blob in the binary container
  var blob = blobFactory.CreateBlob(media.BinaryDataContainer, ".txt");
  using(var s = blob.OpenWrite()) {
    StreamWriter w = new StreamWriter(s);
    w.WriteLine("Hello world");
    w.Flush();
  }

  //Assign to file and publish changes
  media.BinaryData = blob;
  var file1ID = contentRepository.Save(media, SaveAction.Publish);
}
```

Update an existing file with metadata:

```csharp
public void UpdatingMetaData_of_a_file() {
  var contentRepository = ServiceLocator.Current.GetInstance<IContentRepository>();
  var blobFactory = ServiceLocator.Current.GetInstance<IBlobFactory>();

  //the file to update, not hardcoded of course
  var fileID = new ContentReference(444);

  //Get the file
  var file1 = contentRepository.Get<GenericFile>(fileID).CreateWritableClone() as GenericFile;

  //Update description
  file1.Description = "My description";

  //Publish
  var file1ID = contentRepository.Save(file1, SaveAction.Publish);

}
```

Update an existing file with binary data:

```csharp
public void UpdatingBinary_of_a_file() {
  var contentRepository = ServiceLocator.Current.GetInstance<IContentRepository>();
  var blobFactory = ServiceLocator.Current.GetInstance<IBlobFactory>();

  //the file to update, not hardcoded of course
  var fileID = new ContentReference(444);

  //Get the file
  var file1 = contentRepository.Get<GenericFile>(fileID).CreateWritableClone() as GenericFile;

  //Upload new blob
  var blob = blobFactory.CreateBlob(file1.BinaryDataContainer, ".txt");
  using(var s = blob.OpenWrite()) {
    StreamWriter w = new StreamWriter(s);
    w.WriteLine("Hello world");
    w.Flush();
  }

  //Assign to file and publish changes
  file1.BinaryData = blob;
  var file1ID = contentRepository.Save(file1, SaveAction.Publish);
}
```

See [BLOB storage and providers](docId\:rghfw_AHW4kpptHogiLAi) to change the storage model for media.
