If you get the following error with CSOM while trying  to upload documents to SharePoint Online: The server does not allow messages larger than 2097152 bytes

The reason is that CSOM limits SharePoint Online to 2MB file uploads by default if using the “ReadAllBytes” method.

Use the ContentStream property instead:

public void UploadDocumentContentStream(ClientContext ctx, string libraryName, string filePath) {

Web web = ctx.Web;
// Ensure that the target library exists. Create it if it is missing.
if (!LibraryExists(ctx, web, libraryName))
CreateLibrary(ctx, web, libraryName);

using (FileStream fs = new FileStream(filePath, FileMode.Open))
FileCreationInformation flciNewFile = new FileCreationInformation();

// This is the key difference for the first case – using ContentStream property
flciNewFile.ContentStream = fs;
flciNewFile.Url = System.IO.Path.GetFileName(filePath);
flciNewFile.Overwrite = true;

List docs = web.Lists.GetByTitle(libraryName);
Microsoft.SharePoint.Client.File uploadFile = docs.RootFolder.Files.Add(flciNewFile);