This short blog post describes a prototype C# class that uploads files to the Contentstack SaaS headless CMS. I use this code to import media from a list specified in a spreadsheet. This code needs extensive refactoring and testing, but it works, I need to move on to something else, and I am publishing this as a potential reminder for myself. The code is ugly but demonstrates how to create multipart HTTP request bodies to upload files with .NET. The code is procedural and linear, which may help in following it and porting it to other platforms, but probably not in maintaining it.
The Contentstack asset upload documentation is here:
Here is the prototype code for the uploader:
AssetInfo is just a little struct for storing data about an asset.
namespace ContentstackAssetImporter { using System.IO; public struct AssetInfo { public AssetInfo(FileInfo fileInfo, string title, string description, string folderUid = null, string tags = null) { FileInfo = fileInfo; Title = title; Description = description; FolderUid = folderUid; Tags = null; if (tags != null) { Tags = tags.Split("|"); } } public FileInfo FileInfo; public string Title; public string Description; public string FolderUid; public string[] Tags; } }
The only real Contentstack parts are setting the form fields asset[title], asset[description], asset[tags], asset[parent_uid], and encoding the file as asset[upload].
The mime type determination is currently hard-coded based on the filename extension. There is probably a service that maps extensions to mime types, and if there is not, there should be. Big tech companies should publicly host such generic services for free.
I am not certain that the memory stream is required to set the content length; maybe the request class would do that automatically.
Please comment if you have any suggestions and especially if you notice any defects.