SOAP C# Example: Upload a File
The following code is a simple file upload example in C#. It uses the uploadData, beginDataUpload, isJobComplete, finishDataUpload, and getJobStatus.
Tip: The chunk size in the example shows how chunking works, it should be increased for production use.
using System;
using BirstWebService;
using System.IO;
namespace ConsoleApplication1
{
public class UploadExample
{
// sample constants, would normally be read from a secure location
private static string USERNAME = "test@example.com";
private static string PASSWORD = "secret";
private static string FILENAME = "/var/data/testfile.txt";
private static string SPACE_ID = "1111-1111-111-1111";
private const int CHUNK_SIZE = 10 * 1024;
static void Main(string[] args)
{
// get an instance of the web service
CommandWebService cws = new CommandWebService();
// necessary to support cookie based load balancing
cws.CookieContainer = new System.Net.CookieContainer();
// login to the web service
string LoginToken = cws.Login(USERNAME, PASSWORD);
// upload the file
uploadData(cws, LoginToken, SPACE_ID, FILENAME);
}
private static void uploadData(CommandWebService cws, string token, string spaceId, string filename)
{
string source = Path.GetFileNameWithoutExtension(filename);
FileStream fStream = File.OpenRead(filename);
BinaryReader reader = new BinaryReader(fStream);
byte[] bytes;
// upload the data in chunks
string dataUploadToken = cws.beginDataUpload(token, spaceId, source);
do
{
bytes = reader.ReadBytes(CHUNK_SIZE);
if (bytes.Length > 0)
cws.uploadData(token, dataUploadToken, bytes.Length, bytes);
} while (bytes.Length > 0);
// done sending the chunks
cws.finishDataUpload(token, dataUploadToken);
// wait for all of the chunks to arrive, be assembled, and scanned
while (!cws.isDataUploadComplete(token, dataUploadToken))
{
System.Threading.Thread.Sleep(1000);
}
// fetch and output any warnings
string[] dataUploadWarnings = cws.getDataUploadStatus(token, dataUploadToken);
if (dataUploadWarnings != null && dataUploadWarnings.Length > 0)
{
foreach (string s in dataUploadWarnings)
{
Console.WriteLine(s);
}
}
}
}
}