Commands such as AddImageAssetCommand and UpdateDocumentAssetCommand allow you to upload files to Cofoundry by passing in an instance of a class that implements IFileSource. There are several IFileSource built into Cofoundry:
- FormFileSource: For uploading a file from an ASP.NET IFormFilesource.
- EmbeddedResourceFileSource: For uploading a file from an embedded resource.
- StreamFileSource: A general purpose IFileSourcefor working with streams.
FormFileSource
Use  Cofoundry.Web.FormFileSource to wrap an ASP.NET IFormFile from an HTTP request:
public async Task SaveFile(string title, IFormFile formFile)
{
    var imageAssetId = await _advancedContentRepository
        .ImageAssets()
        .AddAsync(new AddImageAssetCommand()
        {
            Title = title,
            File = new FormFileSource(formFile)
        });
}
EmbeddedResourceFileSource
Use EmbeddedResourceFileSource to reference an embedded resource in your application. This is useful for testing or for initializing data:
public async Task SaveFile()
{
    var fileSource = new EmbeddedResourceFileSource(this.GetType().Assembly, "MyProject.MyNamespace.MyFolder", "myimage.jpg");
    var imageAssetId = await _advancedContentRepository
        .ImageAssets()
        .AddAsync(new AddImageAssetCommand()
        {
            Title = "My Embedded Image",
            File = fileSource
        });
}
StreamFileSource
StreamFileSource is a general purpose IFileSource that gives you complete control over how the stream is created and returned.
public async Task SaveFile()
{
    var filePath = "c:\\my-path\\myimage.jpg";
    var fileName = Path.GetFileName(filePath);
    var fileSource = new StreamFileSource(fileName, () => File.OpenRead(filePath));
    var imageAssetId = await _advancedContentRepository
        .ImageAssets()
        .AddAsync(new AddImageAssetCommand()
        {
            Title = Path.GetFileNameWithoutExtension(fileName),
            File = fileSource
        });
}