在ASP.Net中如何?電子照片的上傳

來源:互聯網
上載者:User

目前,在很多的應用中,都有碰到上傳電子照片或者圖片的情況,那麼就來看一下,在.Net中是如何?這個功能的。

//上傳電子照片,沒有儲存到資料庫,只是暫存在Session中,並在image控制項上顯示
  private void btn_upload_Click(object sender, System.EventArgs e)
  {
   //每次上傳照片之前,先清空圖片Session["imageData"],Session["imageSize"]和Session["tempImage"]中的內容
   Session["imageData"] = null;
   Session["imageSize"] = null;
   Session["tempImage"] = null;

   HttpPostedFile upFile = this.up_file.PostedFile;
   int iFileLength = upFile.ContentLength;
   string imageType;
   try
   {
    if( upFile.FileName.Equals("") )
    {
     imageType = "";
    }
    else
    {
     imageType = upFile.FileName.Substring( upFile.FileName.LastIndexOf('.'), upFile.FileName.Length - upFile.FileName.LastIndexOf('.') ).Trim().ToLower();
    }
    if(iFileLength == 0)
    {
     Response.Write("<script language=javascript>");
     Response.Write("alert('請先選擇要上傳的檔案!');");
     Response.Write("</script>");
     return;
    }
    else if( iFileLength > 1048576)
    {
     Response.Write("<script language=javascript>");
     Response.Write("alert('上傳檔案太大,系統限制最大為1M!');");
     Response.Write("</script>");
     return;
    }
    else if(this.tb_gh.Text == "")
    {
     Response.Write("<script language=javascript>");
     Response.Write("alert('請先填寫工號!');");
     Response.Write("</script>");
     return;
    }
    else if( imageType != ".jpg" && imageType != ".bmp" && imageType != ".gif")
    {
     Response.Write("<script language=javascript>");
     Response.Write("alert('圖片格式不正確,要求jpg格式的圖片!');");
     Response.Write("</script>");
     return;
    }
    else
    {
     this.Image1.ImageUrl = this.up_file.PostedFile.FileName;

     if(this.Image1.Width.Value > 100 || this.Image1.Height.Value > 120 )
     {
      this.Image1.ImageUrl = "";
      Response.Write("<script language=javascript>");
      Response.Write("alert('上傳的照片尺寸太大!尺寸限制在100*120之內!');");
      Response.Write("</script>");
      return;
     }
     else
     {
      this.lb_msg.Visible = true;
      this.lb_msg.Text = "電子照片上傳成功!";
    
      byte[] FileByteArray = new byte[iFileLength];
      Stream StreamObject = upFile.InputStream;
      int ImgSize = upFile.ContentLength;
      string ImgType = upFile.ContentType;
      string ImgID = this.tb_gh.Text.Trim();

      Session["tempImage"] = (HttpPostedFile)upFile;

      //重新將圖片資訊賦值給Session
      Session["imageData"] = (byte [])FileByteArray;
      Session["imageSize"] = Convert.ToInt32(ImgSize.ToString());
     }
     
    }
   }
   catch(Exception ex)
   {
    this.lb_msg.Visible = true;
    this.lb_msg.Text = ex.Message.ToString();
   }
  }
本例中,是把圖片以二進位byte []的形式存入資料庫;取出時,先讀取二進位流,然後再寫入一個temp.jpg檔案中進行顯示,代碼如下:

    //建立一個temp.jpg檔案,若已經存在,則改寫該檔案為空白檔案
    FileStream fs = new FileStream(Server.MapPath("..\\image\\temp.jpg"), FileMode.Create);
     fs.Write( (byte [])read["lzb2dzzp"], 0, Convert.ToInt32(read["lzb2imageSize"]) );
    this.Image1.ImageUrl = "..\\image\\temp.jpg";
    
    fs.Close();    
Session["imageData"] = (byte [])read["lzb2dzzp"];
    Session["imageSize"] = Convert.ToInt32( read["lzb2imageSize"] );

也可以選擇將圖片存入檔案目錄中,在讀取和儲存效率方面,可能會更好一些。

存在的問題是:假如第一次查詢資料庫(或者目錄),選擇顯示A的照片,可以正常顯示在image上;第二次,重新進行查詢,然後選擇顯示B的照片,則顯示的仍是A的照片,需要重新整理一次才可以正常顯示B的照片;該問題,自己還未能解決,可能是與緩衝有關,但並不清楚具體問題出在哪裡。若有誰可以提供一個好的解決方案,希望可以在此留言。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.