IWeb ApiCreate File Response(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).
Definition
Namespace: Casewhere.WebTrigger.DSL
Assembly: Casewhere.WebTrigger (in Casewhere.WebTrigger.dll) Version: 1.0.0.0 (1.0.0.0)
Assembly: Casewhere.WebTrigger (in Casewhere.WebTrigger.dll) Version: 1.0.0.0 (1.0.0.0)
C#
void CreateFileResponse(
string fileName,
Action<Stream> beginWritingStream,
string mediaType = "application/octet-stream",
string dispositionHeader = "attachment"
)Parameters
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();
});