使用rotativa创建pdf并保存到Azure blob

时间:2016-08-24 11:28:04

标签: c# asp.net azure-storage-blobs rotativa

我正在尝试在我的MVC项目中创建一个我的View的pdf,并将其保存到Azure blob存储中,而不是在我的服务器上有该文件的副本。

我正在使用Rotativa来创建我的pdf,这很好。

return new ActionAsPdf(ContractVersion) { FileName = "documentname.pdf" };

我使用以下代码将文件保存到Azure存储。

  CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

        // Retrieve a reference to a container.
        CloudBlobContainer container = blobClient.GetContainerReference("contracts");

        // Retrieve reference to a blob named "myblob".
        CloudBlockBlob blockBlob = container.GetBlockBlobReference("myblob");

        // Create or overwrite the "myblob" blob with contents from a local file.
        using (var fileStream = System.IO.File.OpenRead(@"c:\test blob.txt"))
        {
            blockBlob.UploadFromStream(fileStream);
        }

但我不知道如何将两个功能组合起来从视图创建pdf然后保存到blob。

我希望我的问题很明确。感谢您的期待。

2 个答案:

答案 0 :(得分:1)

我在控制器方法中使用MVC5 Partial View实现了它,为了清楚起见,我将其缩写为未显示我的Azure服务对象,它返回blob对象,因为这是标准MS的东西。就像一种享受!

  1. 从Rotativa返回pdf;
  2. 使用" BuildPdf"转换为字节数组;
  3. 将其放入内存流中;
  4. 使用Blob对象上的UploadFromStream上传到Azure Blob

    var file = new Rotativa.PartialViewAsPdf("viewname", model) { FileName = "test" + ".pdf" }; byte[] applicationPDFData = file.BuildPdf(this.ControllerContext); Stream stream = new MemoryStream(applicationPDFData); blob.UploadFromStream(stream);

答案 1 :(得分:0)

我已经下载了程序集。它只有三个构造函数。所有函数都将创建pdf文件。

enter image description here

似乎我们需要将pdf保存为模板文件,然后上传到Azure Blob。