Click or drag to resize

IWebApiCreateFileResponse(String, ActionStream, String, String) Method

Create http file response with a given file name with an action named as beginWritingStream. That action is called when an output stream is available, allowing the action to write to it directly. Thus, allow we can write a largest file (more than 1GB with controlling memory usage).

Namespace: Casewhere.WebTrigger.DSL
Assembly: Casewhere.WebTrigger (in Casewhere.WebTrigger.dll) Version: 1.0.0.0 (1.0.0.0)
Syntax
C#
void CreateFileResponse(
	string fileName,
	Action<Stream> beginWritingStream,
	string mediaType = "application/octet-stream",
	string dispositionHeader = "attachment"
)

Parameters

fileName  String
beginWritingStream  ActionStream
mediaType  String  (Optional)
dispositionHeader  String  (Optional)
Example
C#
var dataApi = ctx.Use<IDataApi>(); 
var webApi = ctx.Use<IWebApi>();

var collectionName = ctx.Parameters.Get<string>("name");
if (string.IsNullOrWhiteSpace(collectionName))
    throw new Casewhere.Common.Exceptions.BadDataException("Missing parameter name");
Log.Info("Start downloading {collectionName}", collectionName);
webApi.CreateFileResponse($"{collectionName}_{DateTime.UtcNow.ToString("yyyyMMddHHmmss")}.json", 
    // delegate function when beginning write data to client
    beginWritingStream: (outputStream) => {
    // prepare writer for output stream
    var writer = new StreamWriter(outputStream, encoding: Encoding.UTF8, bufferSize: 4096, leaveOpen: true);
    writer.AutoFlush = true;
    // read query data
    var filter = FilterBuilder.Create().Build();
    var query = DataEnumerationQuery.For(collectionName).FilterBy(filter);
    foreach (var employee in dataApi.Enumerate(query))
    {
        writer.WriteLine(JsonConvert.SerializeObject(employee) + ",");
    }
    // flush last data in memory before closing stream
    writer.Flush();      
    // close file after stream all content to client
    outputStream.Close();
});
See Also