Ошибка при получении изображения sql из приложения c # - PullRequest
0 голосов
/ 06 мая 2019

Я получаю сообщение об ошибке при попытке загрузить и отобразить таблицу изображений:

data: image / jpg; base64, U3lzdGVtLkJ5dGVbXQ == 'не удается загрузить изображение из-за ошибки'

В моей базе данных SQL есть FileName (nvarhcar) Content (image) и ContentType (nvarchar)

Надеюсь, кто-нибудь может помочь мне понять, почему изображение не отображается.Спасибо

Обновление c # для загрузки изображения

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["User"] == null)
                Response.Redirect("../Login.aspx");

            sqlcon.Open();
            SqlCommand cmd = sqlcon.CreateCommand();
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "SELECT * FROM BluePrints";

            cmd.ExecuteNonQuery();


            DataTable dt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dt);
            gvImages.DataSource = dt;
            gvImages.DataBind();

            sqlcon.Close();
        }

        protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                DataRowView dr = (DataRowView)e.Row.DataItem;
                string imageUrl = "data:image/jpg;base64," + 
                Convert.ToBase64String((byte[])dr["Content"]);
                (e.Row.FindControl("Image1") as Image).ImageUrl = imageUrl;
            }
        }
    }
}
  <asp:GridView ID="gvImages" runat="server" AutoGenerateColumns="false" OnRowDataBound="OnRowDataBound" Height="192px" Width="915px">
    <Columns>
      <asp:BoundField DataField="ID" HeaderText="ID" />
      <asp:BoundField DataField="FileName" HeaderText="Name" />
      <asp:TemplateField HeaderText="Image">
        <ItemTemplate>
          <asp:Image ID="Image1" runat="server" />
        </ItemTemplate>
      </asp:TemplateField>
    </Columns>
  </asp:GridView>
  <div id="dialog" style="display: none">
  </div>
  <br />
  <br />
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
  </script>
  <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.24/themes/start/jquery-ui.css" />
  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.24/jquery- 
       ui.min.js"></script>
  <script type="text/javascript">
    $(function() {
      $("#dialog").dialog({
        autoOpen: false,
        modal: true,
        height: 600,
        width: 600,
        title: "Zoomed Image"
      });
      $("[id*=gvImages] img").click(function() {
        $('#dialog').html('');
        $('#dialog').append($(this).clone());
        $('#dialog').dialog('open');
      });
    });
  </script>
</asp:Content>

Введите код

protected void UploadButton_Click(object sender, EventArgs e)
    {

        FileInfo fi = new FileInfo(FileUploadControl.FileName);
        byte[] documentContent = FileUploadControl.FileBytes;

        string name = fi.Name;

        if (FileUploadControl.HasFile)
        {
            try
            {
                if (FileUploadControl.PostedFile.ContentType == "image/jpeg")
                {
                    if (FileUploadControl.PostedFile.ContentLength < 102400)
                    {

                        StatusLabel.Text = "Upload status: File uploaded!";

                        using (SqlConnection sqlcon = new SqlConnection(con))
                        {

                            sqlcon.Open();
                            SqlCommand cmd = sqlcon.CreateCommand();
                            cmd.CommandType = CommandType.Text;
                            cmd.CommandText = "INSERT INTO BluePrints (ID_Dev, PlotID, FileName, Content) VALUES  (' " + DropDownList1.SelectedValue + " ', '" + DropDownList2.SelectedValue + "', '" + name + "', '" + documentContent + "')";

                            cmd.ExecuteNonQuery();
                        }
                    }

                    else
                        StatusLabel.Text = "Upload status: The file has to be less than 100 kb!";
                }
                else
                    StatusLabel.Text = "Upload status: Only JPEG files are accepted!";

            }
            catch (Exception ex)
            {
                StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message;
            }

        }

1 Ответ

1 голос
/ 06 мая 2019

Проблема в том, что U3lzdGVtLkJ5dGVbXQ== декодируется как System.Byte[], а не что-либо, что должно быть изображением.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...