suresh92 Ответов: 2

Откройте pdf-файл, когда я нажму на ссылку загрузки с помощью ASP.NET с базой данных


problem is file is downloaded but not open in new form.


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

protected void DownloadFile(object sender, EventArgs e)
        {
          //  string filePath = (sender as LinkButton).CommandArgument;
            int id = int.Parse((sender as LinkButton).CommandArgument);
            byte[] bytes;
            string fileName, contentType;
            string constr = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
            using (SqlConnection con = new SqlConnection(constr))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    cmd.CommandText = "select Name,FileName,ContentType,Data from tblFiles where Id=@Id";
                    cmd.Parameters.AddWithValue("@Id", id);
                    cmd.Connection = con;
                    con.Open();
                    using (SqlDataReader sdr = cmd.ExecuteReader())
                    {
                        sdr.Read();
                        bytes = (byte[])sdr["Data"];
                        contentType = sdr["ContentType"].ToString();
                        fileName = sdr["Name"].ToString();
                    }
                    con.Close();
                }
            }
            Response.Clear();
            Response.Buffer = true;
            Response.Charset = "";
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            Response.ContentType = "application/pdf";
            Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName);

            //Response.ContentType = ContentType;
            //Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath));
            //Response.WriteFile(filePath);
            //Response.End();

            Response.BinaryWrite(bytes);            
            Response.End();

        //{
        //    String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
        //    LinkButton lnkbtn = sender as LinkButton;
        //    GridViewRow gvrow = lnkbtn.NamingContainer as GridViewRow;
        //    int fileid = Convert.ToInt32(GrvImageFiles.DataKeys[gvrow.RowIndex].Value.ToString());
        //  //  string name, type;
        //    using (SqlConnection con = new SqlConnection(strConnString))
        //    {
        //        using (SqlCommand cmd = new SqlCommand())
        //        {
        //            cmd.CommandText = "select Name,FileName, ContentType,Data from tblFiles where Id=@Id";
        //            cmd.Parameters.AddWithValue("@id", fileid);
        //            cmd.Connection = con;
        //            con.Open();
        //            SqlDataReader dr = cmd.ExecuteReader();
        //            if (dr.Read())
        //            {
        //                Response.ContentType = dr["FileType"].ToString();
        //                Response.AddHeader("Content-Disposition", "attachment;filename=\"" + dr["FileName"] + "\"");
        //                Response.BinaryWrite((byte[])dr["FileData"]);
        //                Response.End();
        //            }
        //        }
        //    }

     //2.     //string filePath = (sender as LinkButton).CommandArgument;
            //Response.ContentType = ContentType;
            //Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath));
            //Response.WriteFile(filePath);
            //Response.End();


        }

suresh92

не решить

2 Ответов

Рейтинг:
0

an0ther1

Если файл не открывается, то проблема, скорее всего, заключается в том, что информация заголовка ContentType & неправильно задана.
Попробуйте сделать следующее;

// NOTE the additional back slashes are to escape the quotes which are actually required
Response.ContentType = "\".pdf\", \"application/pdf\"";
Response.AddHeader("Content-disposition", "attachment; filename=" + fileName);
Response.BinaryWrite(bytes);
Response.End();


с уважением


Рейтинг:
0

Jochen Arndt

Вы уже использовали attachment как диспозиция, которая говорит браузеру загрузить файл (показать диалоговое окно сохранения файла). Воспользуйся inline вместо:

Response.AddHeader("Content-disposition", "inline; filename=\"" + fileName + "\"");

Это должно работать с большинством браузеров, но некоторые из них все еще могут показывать диалоговое окно сохранения файла.

Смотреть также Content-Disposition - HTTP | MDN[^].


suresh92

хорошо, Йохен Арндт, но мне это нужно во всплывающем окне браузера.

Jochen Arndt

Таким образом, вы хотите, чтобы браузер показывал всплывающее окно с вопросом, Что делать с файлом, например
"Открыть в новом фрейме, открыть с помощью приложения или сохранить как?"

Вы не можете контролировать это со стороны сервера, потому что это зависит от браузера и того, как он настроен.

suresh92

ладно, Йохен Арндт,ты даешь answer.it он открыт во вкладке, но мне нужно показать pdf в браузере google chrome, как всплывающее окно.
8985216241 номер watsapp

suresh92

привет Йохен Арндт,ты даешь answer.it он открыт во вкладке, но мне нужно показать pdf в браузере google chrome, как всплывающее окно

Jochen Arndt

Что вы подразумеваете под всплывающим окном? Открыть в программе просмотра PDF-файлов?

Обычно существует три или четыре варианта работы браузера:
- Он показывает диалоговое окно "Сохранить как"
- Он открывает PDF-файл в браузере
- Он запускает внешний просмотрщик PDF-файлов
- Он спрашивает, Что делать, предлагая все или только два предыдущих варианта

Но вы не можете определить поведение браузера со стороны сервера!
Это зависит от браузера (Chrome, IE, Firefox, Safari, ...) и от того, как он настроен пользователем.

Все, что вы можете сделать, это дать браузеру подсказку с диспозицией "inline" или "attachment".

suresh92

Пожалуйста поддержите меня

suresh92

откройте всплывающее окно в pdf viewer

Jochen Arndt

Опять же: вы не можете контролировать это со стороны сервера.

Это предпочтения пользователя, если он открывает PDF-файл, доставленный встроенным в браузер или с помощью внешнего средства просмотра.