Nader Barman Ответов: 1

Retrive pfd из базы данных в ASP.NET использование C#


using Common;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;

namespace BootStrap.fa
{
    /// <summary>
    /// Summary description for ProductCatalogHandler
    /// 
    public class ProductCatalogHandler : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            int productId;
            if (int.TryParse(context.Request.QueryString["ci"], out productId))
            {
                try
                {
                    using (var db = new Data.ModelContainer1())
                    {
                        var catalog = db.Catalogs.Where(c => c.Product != null && c.Product.Id == productId).FirstOrDefault();
                        if (catalog == null || catalog.CatalogFile == null)
                        {
                            var returnUrl = context.Request.QueryString["ReturnURL2"];
                            context.Response.Redirect(returnUrl);
                            return;
                        }
                        else
                        {
                            var content = (catalog.CatalogFileExt != null) ? catalog.CatalogFileExt : "application/pdf";
                            var filename = (catalog.CatalogFileName != null) ? catalog.CatalogFileName : "Catalog.pdf";
                            filename = filename.Replace(" ", "");

                            context.Response.Buffer = true;
                            context.Response.Charset = "";
                            context.Response.Clear();

                            context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
                            context.Response.AddHeader("Content-Length", catalog.CatalogFile.Length.ToString());
                            context.Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);

                            MemoryStream memory = new MemoryStream(catalog.CatalogFile);
                            context.Response.OutputStream.Write(memory.ToArray(), 0, memory.ToArray().Length);

                            HttpContext.Current.Response.Flush(); HttpContext.Current.Response.Close(); HttpContext.Current.ApplicationInstance.CompleteRequest();
                        }
                    }
                }
                catch { }
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}


Что я уже пробовал:

Когда я загружаю (открываю) pdf непосредственно в Chrome или Firefox, браузер показывает недопустимый код, а в адресной строке-загруженный файл с расширениями "htm".

Пожалуйста, помогите мне.
Спасибо

1 Ответов

Рейтинг:
1

an0ther1

Я использую следующее для передачи отчета с сервера на клиент - отчет представляет собой кристаллический отчет, который экспортируется в System. IO. Stream-что в основном и есть у вас - и успешно работает во всех браузерах, с которыми я тестировал;

// create a byte array to store your memory stream
byte[] fileArray = new byte[memory.Length];
memory.Read(fileArray, 0, Convert.ToInt32(memory.Length));
// clear content & headers
context.Response.ClearContent();
context.Response.ClearHeaders();
// the actual string you require is ".pdf","application/pdf"
// The additional '\' are used to escape the quotes within the string
context.Response.ContentType = "\".pdf\",\"application/pdf\""
context.Response.AddHeader("Content-Length", catalog.CatalogFile.Length.ToString());
context.Response.AddHeader("Content-disposition", "attachment;filename=" + fileName);
context.Response.BinaryWrite(fileArray);
// end the response
context.Response.Flush();
context.Response.Clear();
context.Response.Close();
context.Response.End();


Надеюсь, это поможет

с уважением


Member 11146269

К надеру бармену, Грэму Гранту или еще кому-нибудь:
Для тех из нас, кто пытается понять это немного дальше, не могли бы вы предоставить контекст относительно того, как вы будете реализовывать вышеприведенный код? Любая дополнительная информация поможет мне нарисовать более четкую картину.

Спасибо.

an0ther1

Это зависит от технологии, которую вы используете - ASP против MVC.
Вам, вероятно, лучше поднять новый вопрос, который комментируется здесь

с уважением