Как я могу загрузить PDF файл записи в базе данных MySQL с помощью C #?

С помощью этого запроса ( Как я могу прикрепить файл PDF к записи базы данных SQL с помощью C #? ), и с некоторыми незначительными изменениями я мог бы добавить файл PDF в таблицу MySQL, Теперь у меня возникла обратная проблема: мне нужно иметь возможность загрузить загруженный файл, я использую VS2015, заранее спасибо ....

0
задан 13.04.2017, 16:00
2 ответа

В предыдущем вопросе в статье, который я предлагаю, я объясняю, как загружать файл

[ASP.NET] Записывать Файл в базе данных

, Если ты анализируешь слой данных, ты увидишь метод, чтобы возвращать файл из-за id.

    public static byte[] GetById(int Id)
    {
        using (MySqlConnection conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["default"].ToString()))
        {
            conn.Open();

            string query = @"SELECT archivo
                            FROM Archivos
                            WHERE Id = @id";

            MySqlCommand cmd = new MySqlCommand(query, conn);
            cmd.Parameters.AddWithValue("@id", Id);

            MySqlDataReader reader = cmd.ExecuteReader();

            if (reader.Read())
            {
                return (byte[])reader["archivo"];
            }

        }

        return null;

    }

важное состоит в том, чтобы видеть, поскольку распределяется контент поля как byte[] в линии return

С этим результатом, ты был бы должен посылать это клиенту в Response для Вашего разряда. Гаага несколько способов добиваться разряда но самой простой состоят посредством страницы в том, что ты мог бы называть себе download.aspx

public partial class Download : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        int id = Convert.ToInt32(Request.QueryString["id"]);

        byte[] archivo = ArchivosDAL.GetById(id);

        Response.Clear();

        Response.AddHeader("content-disposition", string.Format("attachment;filename={0}", "nombrearch.pdf"));
        Response.ContentType = "application/octet-stream";

        Response.BinaryWrite(archivo.ContenidoArchivo);
        Response.End();

    }
}

, определяют ContentType = "application/octet-stream" для того, чтобы он показал поле ввода разряда вместо того, чтобы показывать pdf, впитанный в browser

0
ответ дан 24.11.2019, 14:37
  • 1
    большое спасибо обоим из-за помощи, загрузи файл в perfecci и # 243; n, но у меня есть сейчас другое сомнение и #191;? и #191; как я могу открывать файл в формуляре ASP?, идея быть и # 237; в без необходимости загружать файл в команду клиента, и #191; понимают? – Alberto Maureira 08.04.2016, 16:29
  • 2
    на этот случай измени ContentType определяя application/pdf, таким образом, browser он это распознает и это откроет впитанный – Leandro Tuttini 08.04.2016, 16:40
  • 3
    ok, реализуйте какие-то изменения и в конце концов qued и # 243; следующего способа... < br / и gt; Response.Clear(); <br/> //Response.AddHeader("content-disposition",String.Format("attachment;filename={0}", "nombrearch.pdf")); Response.ContentType = "application/pdf"; Response.BinaryWrite(archivo.ContenidoArchivo); Response.End(); . – Alberto Maureira 08.04.2016, 17:07
  • 4
    Что я перемещаю, что desmarcaste ответ? файл не сохраняет НИКОГДА как base64, если он это может сохранять поле varbinary. Если ты это сохраняешься, как string - наихудшая идея. Единственное, что это могло бы оправдывать использовать base64,, - если ты определяешь рядом с изображением метаданные в xml – Leandro Tuttini 11.08.2016, 20:53

Код ссылки, которую ты выставляешь, сохраняет в DB PDF в Base64, сейчас ты должен реализовывать противоположность декодировать Base64 в физический файл, и делаешь это следующим способом.

Предполагая уже имей в переменной base64 PDF, полученного посредством консультации или чего-то сходного, пример b64Str

ты Это обращаешь в файл следующего способа

Byte[] bytes = Convert.FromBase64String(b64Str);
File.WriteAllBytes(path, bytes);
0
ответ дан 24.11.2019, 14:37