Fusion Azure Blob (Pdf) dans un Blob et le télécharger à l'utilisateur par l'intermédiaire de C# ASP.NET

0

La question

J'ai un ASP.NET Azure web application écrite en C# qui implique que l'utilisateur le téléchargement de différents fichiers pdf dans Azure Blob storage. J'aimerais que l'utilisateur de télécharger ultérieurement un fichier PDF combiné inclusive précédemment téléchargé gouttes dans un ordre spécifique. Aucune idée sur la meilleure façon d'accomplir cette?

asp.net azure blob c#
2021-11-21 19:18:14
1

La meilleure réponse

1

Voici 2 solutions que vous pouvez essayer

  1. L'utilisation d'Azure Fonctions.
  2. Le téléchargement de vos fichiers pdf à partir d'Azure Blob sur votre ordinateur local, puis de les fusionner.

Utilisation des Fonctions d'Azur

  1. Créer un azure fonction du projet et de l'utilisation de la HTTP Déclencheur.
  2. Assurez-vous d'installer les packages ci-dessous avant de commencer à coder.
  3. Créer le code de la Fonction.
  4. Créer Azure fonction dans le portail.
  5. Publier le code.

Nous sommes prêts à commencer l'écriture de code. Nous avons besoin de deux fichiers:

  1. ResultClass.cs – renvoie le fichier fusionné(s) sous forme de liste.
  2. Fonction1.cs – CCode qui prend les noms de fichier à partir de l'URL, les retient du compte de Stockage, les fusionne en une seule, et renvoie une URL de téléchargement.

ResultClass.cs

using System;
using System.Collections.Generic;

namespace FunctionApp1
{

    public class Result
    {

        public Result(IList<string> newFiles)
        {
            this.files = newFiles;
        }

        public IList<string> files { get; private set; }
    }
}

Fonction1.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Configuration;
using Microsoft.WindowsAzure.Storage.Blob;
using Newtonsoft.Json;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;

namespace FunctionApp1
{
    public class Function1
    {

        static Function1()
        {

            // This is required to avoid the "No data is available                         for encoding 1252" exception when saving the PdfDocument
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

        }

        [FunctionName("Function1")]
        public async Task<Result> SplitUploadAsync(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequestMessage req,
            //container where files will be stored and accessed for retrieval. in this case, it's called temp-pdf
            [Blob("temp-pdf", Connection = "")] CloudBlobContainer outputContainer,
            ILogger log)
        {
            //get query parameters

            string uriq = req.RequestUri.ToString(); 
            string keyw = uriq.Substring(uriq.IndexOf('=') + 1);

            //get file name in query parameters
            String fileNames = keyw.Split("mergepfd&filenam=")[1];

            //split file name
            string[] files = fileNames.Split(',');

            //process merge
            var newFiles = await this.MergeFileAsync(outputContainer, files);

            return new Result(newFiles);

        }

        private async Task<IList<string>> MergeFileAsync(CloudBlobContainer container, string[] blobfiles)
        {
            //init instance
            PdfDocument outputDocument = new PdfDocument();

            //loop through files sent in query
            foreach (string fileblob in blobfiles)
            {
                String intfile = $"" + fileblob;

                // get file
                CloudBlockBlob blob = container.GetBlockBlobReference(intfile);

                using (var memoryStream = new MemoryStream())
                {
                    await blob.DownloadToStreamAsync(memoryStream);

                    //get file content
                    string contents = blob.DownloadTextAsync().Result;
                   
                    //open document
                    var inputDocument = PdfReader.Open(memoryStream, PdfDocumentOpenMode.Import);

                    //get pages
                    int count = inputDocument.PageCount;
                    for (int idx = 0; idx < count; idx++)
                    {
                        //append
                        outputDocument.AddPage(inputDocument.Pages[idx]);
                    }


                }
            }


            var outputFiles = new List<string>();
            var tempFile = String.Empty;

            //call save function to store output in container
            tempFile = await this.SaveToBlobStorageAsync(container, outputDocument);

            outputFiles.Add(tempFile);

            //return file(s) url
            return outputFiles;
        }

        private async Task<string> SaveToBlobStorageAsync(CloudBlobContainer container, PdfDocument document)
        {

            //file name structure
            var filename = $"merge-{DateTime.Now.ToString("yyyyMMddhhmmss")}-{Guid.NewGuid().ToString().Substring(0, 4)}.pdf";

            // Creating an empty file pointer
            var outputBlob = container.GetBlockBlobReference(filename);

            using (var stream = new MemoryStream())
            {
                //save result of merge
                document.Save(stream);
                await outputBlob.UploadFromStreamAsync(stream);
            }

            //get sas token
            var sasBlobToken = outputBlob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
            {
                SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(5),
                Permissions = SharedAccessBlobPermissions.Read
            });

            //return sas token
            return outputBlob.Uri + sasBlobToken;
        }
    }
}

Le téléchargement de vos fichiers pdf à partir d'Azure Blob sur votre ordinateur local, puis de les fusionner

 internal static void combineNormalPdfFiles()
        {
            String inputFilePath1 = @"C:\1.pdf";
            String inputFilePath2 = @"C:\2.pdf";
            String inputFilePath3 = @"C:\3.pdf";
            String outputFilePath = @"C:\Output.pdf";
            String[] inputFilePaths = new String[3] { inputFilePath1, inputFilePath2, inputFilePath3 };

            // Combine three PDF files and output.
            PDFDocument.CombineDocument(inputFilePaths, outputFilePath);
        }

RÉFÉRENCES:

  1. Azure Fonction de combiner des PDF en objets Blob dans le Compte de Stockage Azure Blob (conteneur)
  2. C# Fusionner PDF SDK: Fusion, de combiner des fichiers PDF en C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
2021-11-22 05:18:46

SwethaKandikonda-MT, c'était une solution étonnante et que j'ai réussi à intégrer dans mon site web. Mes sincères remerciements à vous de répondre! Je n'avais pas travaillé avec Azure Fonctions avant votre commentaire, mais je sais beaucoup plus maintenant. La commande et la compilation téléchargé azure blob fichiers Pdf en un seul document PDF a été quelque chose que j'ai presque renoncé jusqu'à présent.
Wallstreetguy

Si ma réponse vous a aidé, vous pouvez l'accepter comme une réponse (Cliquez sur la coche à côté de la réponse à bascule à partir de grisé à remplir). Cela peut être utile à d'autres membres de la communauté. Merci
SwethaKandikonda-MT

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................