Zlúčiť Azure Guličky (Pdf) do jedného Blob a stiahnuť do používateľ cez C# ASP.NET

0

Otázka

Mám ASP.NET Azure web aplikácia napísaná v C#, ktorý zahŕňa užívateľ nahrávanie rôznych súborov pdf do Azure Blob storage. Rád by som sa užívateľovi neskôr stiahnuť kombinácii PDF inclusive predtým odovzdané guličky v konkrétnom poradí. Akýkoľvek nápad na najlepší spôsob, ako to dosiahnuť?

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

Najlepšiu odpoveď

1

Tu sú 2 spôsoby, ktoré môžete vyskúšať

  1. Použitie Azure Funkcie.
  2. Stiahnuť pdf súbory z Azure Blob na lokálnom počítači, potom zlúčiť ich.

Používanie Funkcie Azure

  1. Vytvoriť azure funkcia projektu a používať HTTP Spúšť.
  2. Uistite sa, že nainštalujete nižšie balíkov predtým, než začíname s kódovaním.
  3. Vytvorenie Funkčného kódu.
  4. Vytvoriť Azure funkcia v portáli.
  5. Zverejňovať kód.

Sme pripravení začať písať kód. Potrebujeme dva súbory:

  1. ResultClass.cs – vráti sa zlúčil súbor(y) ako zoznam.
  2. Function1.cs – CCode, že trvá názvy súborov z adresy URL, chytí ich z účtu Skladovanie, spojí ich do jedného, a vráti odkazom na stiahnutie.

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; }
    }
}

Function1.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;
        }
    }
}

Stiahnuť pdf súbory z Azure Blob na lokálnom počítači, potom zlúčiť ich

 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);
        }

ODKAZY:

  1. Azure Funkcie spojiť PDF Guličky v Azure Storage Úvahy (Blob kontajner)
  2. C# Merge PDF SDK: Spojiť, spojiť PDF súbory v C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
2021-11-22 05:18:46

SwethaKandikonda-MT, to bolo úžasné riešenie, a ten, ktorý som úspešne začleniť do mojej webovej stránke. Môj veľa úprimné poďakovanie za reagovať! Som nemal pracoval s Azure Funkcie pred váš komentár, ale ja viem, tak oveľa viac teraz. Objednávanie a zostavovaní odovzdané azure blob Pdf súbory do jedného dokumentu PDF bolo niečo, čo som sa takmer vzdal, až kým to.
Wallstreetguy

Ak moja odpoveď je, pomohol, môžete to prijať ako odpoveď (Kliknite na znak začiarknutia vedľa odpoveď na prepínanie z sivé vyplniť). To môže byť prospešné pre ostatných členov komunity. Ďakujeme
SwethaKandikonda-MT

V iných jazykoch

Táto stránka je v iných jazykoch

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