Преобразование файла записи в PDF в функции Azure - PullRequest
0 голосов
/ 02 сентября 2018

Я хочу добиться, чтобы опубликовать данные, которые включают текст и файл со страницы html, в функцию Azure, а затем отправить эти данные на электронную почту администратора. Я попробовал это, но теперь смог получить отправленный файл.

HTML-страница:

          <script>

             function myFormOnSubmit()
             {
                 var formData = new FormData();

                 formData.append("firstname",$('#firstname').val());
                 formData.append("lastname",$('#lastname').val());
                 formData.append("phonenumber",$('#phonenumber').val());
                 formData.append("email",$('#email').val());
                 formData.append("position",'Software Engineer');
                 formData.append("resume", $('input[type=file]')[0].files[0]);

                $.ajax({
                      url: "function URL",
                      type: 'POST',
                      data: formData,
                      success: function (data) {
                      alert(data)
                      },
                      cache: false,
                      contentType: false,
                      processData: false
                      });

                      return false;
             }

          </script>

Функция Azure

      public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", "options", Route = null)]HttpRequestMessage req, TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");
            if (req.Content.IsFormData())
                log.Info("form data");
            if(req.Content.IsMimeMultipartContent())
                log.Info("multimedia content");
            var provider = new MultipartFormDataStreamProvider("TempData\\");
            var multimediaProvider = await req.Content.ReadAsMultipartAsync(provider);
            var formData = multimediaProvider.FormData;


            var apiKey = "SendGridApi Key";
            var client = new SendGridClient(apiKey);
            var from = new EmailAddress("no_reply@domain.com", "Auto Generated");
            var subject = "Application for " + formData["position"];




            var to = new EmailAddress("admin email", "Admin");
            var plainTextContent = subject;
            var htmlContent = $"<strong>First Name :</strong> {formData["firstname"]}<br><strong>Last Name :</strong> {formData["lastname"]}<br><strong>Phone Number :</strong> {formData["phonenumber"]}<br><strong>Email :</strong> {formData["email"]}";
            var msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);
            client.SendEmailAsync(msg);
            // parse query parameter

  var resumeContent = multimediaProvider.Contents?.FirstOrDefault();
            if (resumeContent!=null)
            {
                var resume = await resumeContent.ReadAsByteArrayAsync();
                var file = Convert.ToBase64String(resume);
                msg.AddAttachment("test.pdf", file);
            }

           return req.CreateResponse(HttpStatusCode.OK);
        }

но я бы не смог этого сделать, как я могу получить файл из запроса и отправить его по электронной почте?

1 Ответ

0 голосов
/ 10 сентября 2018

Итак, чего я хочу добиться - при публикации данных файла и формы в функцию Azure, получить этот файл и данные и отправить их по электронной почте администратору через функцию Azure без использования BLOB-объекта Azure или другого хранилища. вот решение для этого я использовал Azure временное хранилище для пути.

 public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", "options", Route = null)]HttpRequestMessage req, TraceWriter log)
    {
        log.Info("C# HTTP trigger function processed a request.");
        if (!req.Content.IsMimeMultipartContent())
        {
            return req.CreateErrorResponse(HttpStatusCode.BadRequest,new Exception("UnSupported Meida Type"));
        }

        var provider = new MultipartFormDataStreamProvider(Path.GetTempPath());

        try
        {
            // Read the form data.
            await req.Content.ReadAsMultipartAsync(provider);


        }
        catch (System.Exception e)
        {
            return req.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
        }

        var formData = provider.FormData;

        var apiKey = "apiEkey";
        var client = new SendGridClient(apiKey);
        var from = new EmailAddress("no_reply@domain.com", "Auto Generated");
        var subject = "Application for " + formData["position"];
        var to = new EmailAddress("toemail", "Admin");
        var plainTextContent = subject;
        var htmlContent = $"<strong>First Name :</strong> {formData["firstname"]}<br><strong>Last Name :</strong> {formData["lastname"]}<br><strong>Phone Number :</strong> {formData["phonenumber"]}<br><strong>Email :</strong> {formData["email"]}";
        var msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);

        foreach (MultipartFileData file in provider.FileData)
        {
            var bytes = File.ReadAllBytes(file.LocalFileName);
            var fileBase64 = Convert.ToBase64String(bytes);
            string fileName = file.Headers.ContentDisposition.FileName;
            if (fileName.StartsWith("\"") && fileName.EndsWith("\""))
            {
                fileName = fileName.Trim('"');
            }
            msg.AddAttachment(fileName, fileBase64);
        }

        client.SendEmailAsync(msg);




       return req.CreateResponse(HttpStatusCode.OK);
    }
...