Brad Mathews
Brad Mathews

Reputation: 1857

Azure Web SItes - how to write to a file

I am using abcPDF to dynamically create PDFs.

I want to save these PDFs for clients to retrieve any time they want. The easiest way (and the way I do now on my current server) is to simply save the finished PDF to the file system.

Seems I am stuck with using blobs. Luckily abcPDF can save to a stream as well as a file. Now, how to I wire up a stream to a blob? I have found code that shows the blob taking a stream like:

blob.UploadFromStream(theStream, options);

The abcPDF function looks like this:

theDoc.Save(theStream)

I do not know how to bridge this gap.

Thanks! Brad

Upvotes: 1

Views: 597

Answers (2)

user94559
user94559

Reputation: 60153

As an alternative that doesn't require holding the entire file in memory, you might try this:

using (var stream = blob.OpenWrite())
{
    theDoc.Save(stream);
}

EDIT

Adding a caveat here: if the save method requires a seekable stream, I don't think this will work.

Upvotes: 4

astaykov
astaykov

Reputation: 30893

Given the situation and not knowing the full list of overloads of Save() method of abcPdf, it seems that you need a MemoryStream. Something like:

using(MemoryStream ms = new MemoryStream())
{
    theDoc.Save(ms);
    ms.Seek(0, SeekOrigin.Begin);
    blob.UploadFromStream(ms, options);
}

This shall do the job. But if you are dealing with big files, and you are expecting a lot of traffic (lots of simultaneous PDF creations), you might just go for a temp file. Write the PDF to a temp file, then immediatelly upload the temp file for the blob.

Upvotes: 1

Related Questions