簡體   English   中英

將base64字符串轉換為圖像C#時出錯

[英]Error in converting base64 string to image c#

我想在網頁上顯示圖像,同時單擊應該下載的鏈接按鈕。 圖像文件以二進制格式存儲在db中。 在將base64字符串轉換為圖像時顯示錯誤。 細節在下面給出。 幫助我找到適當的解決方案。 謝謝。

錯誤:

在此處輸入圖片說明

碼:

 protected void Page_Load(object sender, EventArgs e)
  {
   if (!IsPostBack)
     {

      pdfDataSetTableAdapters.tbl_imgTableAdapter td;
      td = new pdfDataSetTableAdapters.tbl_imgTableAdapter();
      DataTable dt = new DataTable();
      dt = td.GetId();
      DropDownList1.DataSource = dt;
      DropDownList1.DataTextField = "Id";
      DropDownList1.DataValueField = "Id";
      DropDownList1.DataBind();
      DropDownList1.Items.Insert(0, new System.Web.UI.WebControls.ListItem("--Select Id--", ""));
     }

  }
  protected void Button1_Click(object sender, EventArgs e)
   {
     pdfDataSetTableAdapters.tbl_imgTableAdapter td;
     td = new pdfDataSetTableAdapters.tbl_imgTableAdapter();
     DataTable dt = new DataTable();
     dt = td.GetImg(int.Parse(DropDownList1.SelectedValue));
     foreach (DataRow row in dt.Rows)
      {
         byte[] img2 = (byte[])row["img"];
         string base2 = Convert.ToBase64String(img2);
         Image1.ImageUrl = "data:image/jpg;base64," + base2;
       }     
   }

protected void LinkButton1_Click(object sender, EventArgs e)
   {
        string sFile = Image1.ImageUrl;
        if (string.IsNullOrEmpty(sFile))
        {
            return;
        }
        FileInfo fi = new FileInfo(Server.MapPath(sFile)); // error popup here
        if (!fi.Exists)
        {
            return;
        }
        if (!string.IsNullOrEmpty(sFile))
        {
            // check if the file is an image
            NameValueCollection imageExtensions = new NameValueCollection();
            imageExtensions.Add(".jpg", "image/jpeg");
            imageExtensions.Add(".gif", "image/gif");
            imageExtensions.Add(".png", "image/png");
            if (imageExtensions.AllKeys.Contains(fi.Extension))
            {
                Response.ContentType = imageExtensions.Get(fi.Extension);
                Response.AppendHeader("Content-Disposition", "attachment; filename=" + fi.Name);
                Response.TransmitFile(fi.FullName);
                Response.End();
            }
            Response.Redirect(sFile);
        }

Aspx:

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"> </asp:DropDownList>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Show" />
<asp:LinkButton ID="LinkButton1" runat="server">Download</asp:LinkButton>
<asp:Image ID="Image1" runat="server" />

SQL查詢1:

SELECT Id FROM tbl_img

SQL查詢1:

SELECT img FROM tbl_img WHERE (Id = @Id)

D B:

在此處輸入圖片說明

O / P屏幕:

在此處輸入圖片說明

當用戶單擊“下載”鏈接時,您嘗試打開Image1.URL,它是一個dataURL,而不是實際路徑。 這將導致MapPath失敗。

Image1.URL之所以是dataURL的原因是,當您單擊按鈕1(顯示)時,將圖像設置為dataURL。

您可以做的是將dataURL解析為文件並將其發送

protected void LinkButton1_Click(object sender, EventArgs e){
    var data = Image1.ImageUrl.split('base64,')[1];
    File f = Parse.File("filename.jpg", {"base64": data});
    Response.Clear();
    Response.ContentType = "image/jpg";
    Response.WriteFile(f);
    Response.Flush();
    Response.End();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM