예제 #1
0
        public static MemoryStream ConvertWordToPdf(MessageBodyParameterModel messageBodyParameterModel)
        {
            try
            {
                //Nuget Package Manager üzerinden kurdugum framework'ü kullanıyorum convert için.
                Document document = new Document();
                document.LoadFromStream(new MemoryStream(messageBodyParameterModel.File), FileFormat.Docx2013);

                using MemoryStream memoryStream = new MemoryStream();
                document.SaveToStream(memoryStream, FileFormat.PDF);

                return(memoryStream);
            }
            catch (Exception)
            {
                throw new Exception("Dosya çevirme işlem başarısız.");
            }
        }
예제 #2
0
        public IActionResult Converter(ConverterViewModel converterViewModel)
        {
            var messageBodyParameter = new MessageBodyParameterModel
            {
                Email    = converterViewModel.Email,
                FileName = Path.GetFileNameWithoutExtension(converterViewModel.File.FileName),
                File     = FileToByteArray(converterViewModel.File)
            };

            string messageBodyParameterSerilazed = JsonSerializer.Serialize(messageBodyParameter);

            byte[] bodyMessageArray = Encoding.UTF8.GetBytes(messageBodyParameterSerilazed);

            KuyrugaMesajiGonder(bodyMessageArray);

            ViewBag.Message = "Word dosyanız pdf dosyasına dönüştürüldükten sonra, size email olarak gönderilecektir.";

            return(RedirectToAction(nameof(Converter)));
        }
예제 #3
0
        static void Main(string[] args)
        {
            var connectionFactory = new ConnectionFactory
            {
                Uri = new Uri("amqps://*****:*****@moose.rmq.cloudamqp.com/tgvevtgl")
            };

            using IConnection connection = connectionFactory.CreateConnection();
            using IModel channel         = connection.CreateModel();

            channel.ExchangeDeclare(
                exchange: "converter-exchange",
                type: ExchangeType.Direct,
                durable: true,
                autoDelete: false,
                arguments: null
                );

            channel.QueueBind(
                queue: "file",
                exchange: "converter-exchange",
                routingKey: "wordtopdf"
                );

            //Mesajlar bana 1-1 gelecek, aynı anda 2 mesaj gelmeyecek
            channel.BasicQos(
                prefetchSize: 0,
                prefetchCount: 1,
                global: false
                );

            var eventingBasicConsumer = new EventingBasicConsumer(channel);

            /* Artık tüketme işlemini gerçekleştircem.
             * queue: kuyruk ismi,
             * autoAck: false -> otomatik bir mesaj alındıgı zaman o mesaj düşsün mü? hayır ben kendim göndericem. Örneğin eposta gönderemezsem mesaj düşmesin çünkü ben e-posta göndermemeişim. illa ki doğru olarak işlemem lazım.
             */
            channel.BasicConsume(
                queue: "file",
                autoAck: false,
                consumer: eventingBasicConsumer
                );


            eventingBasicConsumer.Received += (model, basicDeliverEventArgs) =>
            {
                byte[] bodyByte       = basicDeliverEventArgs.Body.ToArray();
                string serilazedModel = Encoding.UTF8.GetString(bodyByte);
                MessageBodyParameterModel messageBodyParameterModel = JsonSerializer.Deserialize <MessageBodyParameterModel>(serilazedModel);

                MemoryStream stream = Utilities.ConvertWordToPdf(messageBodyParameterModel);

                bool isSuccess = Utilities.EmailSender(
                    email: messageBodyParameterModel.Email,
                    memoryStream: stream,
                    fileName: messageBodyParameterModel.FileName
                    );

                if (isSuccess)
                {
                    Console.WriteLine("Kuyruktan mesaj başarıyla işlendi");

                    //Mesajı başarıyla işlediğimi ve sıradaki işi istediğimi bildiriyorum. (Dönüştürmede hata alırsa bu kod çalışmayacağı için kuyruktan mesaj silinmeyecek.)
                    channel.BasicAck(
                        deliveryTag: basicDeliverEventArgs.DeliveryTag,
                        multiple: false //hepsi için başarılı değil, elimdeki iş için başarılı
                        );
                }
            };

            Console.WriteLine("Çıkış yapmak tıklayınız..");
            Console.ReadLine();
        }