【问题标题】:Why I am getting one more character?为什么我又多了一个角色?
【发布时间】:2016-12-03 02:26:59
【问题描述】:

您好,我正在使用此 C# 代码上传图片。

 protected void UploadFile(object sender, EventArgs e)
{
    string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);
    string contentType = FileUpload1.PostedFile.ContentType;
    using (Stream fs = FileUpload1.PostedFile.InputStream)
    {
        using (BinaryReader br = new BinaryReader(fs))
        {
            byte[] bytes = br.ReadBytes((Int32)fs.Length);
            string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
            using (MySqlConnection con = new MySqlConnection(constr))
            {
                string query = "INSERT INTO foto(FileName, ContentType, Content) VALUES (@FileName, @ContentType, @Content)";
                using (MySqlCommand cmd = new MySqlCommand(query))
                {
                    cmd.Connection = con;
                    cmd.Parameters.AddWithValue("@FileName", filename);
                    cmd.Parameters.AddWithValue("@ContentType", contentType);
                    cmd.Parameters.AddWithValue("@Content", bytes);
                    con.Open();
                    cmd.ExecuteNonQuery();
                    con.Close();
                }
            }
        }
    }
    Response.Redirect(Request.Url.AbsoluteUri);
}

我在 longblob 字段中上传图像,然后显示图像我使用 C# WebService、AJAX、JavaScript,将图像转换为 Base64String,但图像显示为不存在。

这是我的 Base64String:

Base64String

如您所见,问题在于这些额外的字符:

AAEAAAD/////AQAAAAAAAAAPAQAAAHgBAAAC

为什么会这样?我该如何解决?

【问题讨论】:

  • 那是二进制格式的序列化头,很奇怪。你看过表中的数据吗?它是否包括那些前导字节?如果不是,您需要在 ToBase64String 调用之前显示加载和读取数据的代码

标签: c# mysql blob


【解决方案1】:

你能用上面的代码替换下面的行吗

      protected void UploadFile(object sender, EventArgs e)
        {
        string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);
        string contentType = FileUpload1.PostedFile.ContentType;
        using (Stream fs = FileUpload1.PostedFile.InputStream)
            {
            using (BinaryReader br = new BinaryReader(fs))
                {
                System.Drawing.Image imagetuUpload = System.Drawing.Image.FromStream(fs);

                Bitmap bitmap = new Bitmap(imagetuUpload);
                System.IO.MemoryStream stream = new MemoryStream();
                bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
                stream.Position = 0;
                byte[] upproimag = new byte[stream.Length + 1];
                stream.Read(upproimag, 0, upproimag.Length);

                string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
                using (MySqlConnection con = new MySqlConnection(constr))
                    {
                    string query = "INSERT INTO foto(FileName, ContentType, Content) VALUES (@FileName, @ContentType, @Content)";
                    using (MySqlCommand cmd = new MySqlCommand(query))
                        {
                        cmd.Connection = con;
                        cmd.Parameters.AddWithValue("@FileName", filename);
                        cmd.Parameters.AddWithValue("@ContentType", contentType);
                        cmd.Parameters.AddWithValue("@Content", upproimag);
                        con.Open();
                        cmd.ExecuteNonQuery();
                        con.Close();
                        }
                    }
                }
            }
        Response.Redirect(Request.Url.AbsoluteUri);
        }

我希望它可以帮助你:)

【讨论】:

  • 在 C# asp.net 页面上查看使用下面的代码 imguser.ImageUrl = "data:image/jpg;base64," + Convert.ToBase64String(SQL blob);
  • 调用图像时出现问题!但感谢您的帮助
【解决方案2】:

很久以前,我遇到过同样的问题,除了当时这样做之外,我不记得了:

我检查一下我是不是错了:

http://jsfiddle.net/hpP45/ 

我尝试先解码(google bse64 解码器)

https://www.base64decode.org/ 

将解码后的二进制数据保存为jpeg文件并打开。

如果它没有打开,那么我猜,你的 base64 编码可能有问题

【讨论】:

    猜你喜欢
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 1970-01-01
    • 2019-10-04
    相关资源
    最近更新 更多