2012-07-11 107 views
1

我有一個文件上傳和下載使用ajaxFileUploader和2個處理程序。無法加載圖像從數據庫

ajaxFileUploader代碼:

$.ajaxFileUpload 
    (
     { 
      url: 'AjaxFileUploader.ashx?user=' + userId, 
      secureuri: false, 
      fileElementId: 'uploadControl', 
      dataType: 'json', 
      data: '{}', 
      success: function (mydata) { 

       alert("Image Successfully Uploaded"); 

       $('#imgdefaultphoto').attr('src', 'ImageRetrieval.ashx?user=' + userId); 
      }, 
      error: function() { 

      } 
     } 
    ) 

AjaxFileUploader.ashx代碼:

public void ProcessRequest(HttpContext context) 
    { 

     if (context.Request.Files.Count > 0) 
     { 
      string path = context.Server.MapPath("~/Temp"); 
      if (!Directory.Exists(path)) 
       Directory.CreateDirectory(path); 

      var file = context.Request.Files[0]; 

      string userid = context.Request.QueryString["user"]; 

      string fileName; 

      if (HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE") 
      { 
       string[] files = file.FileName.Split(new char[] { '\\' }); 
       fileName = files[files.Length - 1]; 
      } 
      else 
      { 
       fileName = file.FileName; 
      } 
      string fileType = file.ContentType; 
      string strFileName = fileName; 

      int filelength = file.ContentLength; 
      byte[] imagebytes = new byte[filelength]; 
      file.InputStream.Read(imagebytes, 0, filelength); 

      DBAccess dbacc = new DBAccess(); 
      dbacc.saveImage(imagebytes, userid); 

      var serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
      var result = new { name = file.FileName }; 
      context.Response.Write(serializer.Serialize(result)); 

     } 

ImageRetrieval.ashx代碼:

 public void ProcessRequest(HttpContext context) 
    { 

     string userId = HttpContext.Current.Request.QueryString["user"]; 

     if (userId != null) 
     { 
      DBAccess dbacc = new DBAccess(); 

      DataTable dt = dbacc.getImage(userId); 

      context.Response.ContentType = "image/png"; 

      context.Response.BinaryWrite((byte[])dt.Rows[0]["UserImage"]); 

      context.Response.Flush(); 
     } 
     else 
     { 
      context.Response.Write("No Image Found"); 
     } 
    } 

圖像被上傳在數據庫中,但是當我嘗試加載它並將其附加到我的img標籤,圖像標籤顯示破碎的圖像。我不知道是什麼原因或似乎是問題。任何幫助將不勝感激。謝謝!

編輯了一些行。仍然沒有運氣。

+0

代碼看起來還好我說,你可以驗證什麼在Ajax調用F12鉻發生的事情,你得到正確的結果那裏並使用context.Response.Flush();二進制寫入後。 – SSA 2012-07-11 10:13:55

+0

糟糕!忘了做f12。我有一些錯誤。加載資源失敗:服務器響應狀態爲404(未找到)。處理程序的名稱與.attr src衝突。改變了它,但仍然是相同的錯誤。 – ljpv14 2012-07-11 10:37:02

+0

然後你處理程序沒有註冊。 – SSA 2012-07-11 10:38:55

回答

0

根據你的最後一句話試試這個:

var img = dt.Rows[0]["UserImage"]; 
byte[] imagebytes = img.ToArray(); 
context.Response.BinaryWrite(imagebytes); 

static byte[] GetBytes(string str) 
{ 
    byte[] bytes = new byte[str.Length * sizeof(char)]; 
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); 
    return bytes; 
} 
+0

仍然沒有這個運氣。 – ljpv14 2012-07-11 12:25:55

+0

什麼是您的數據庫列類型用於存儲圖像? – SSA 2012-07-11 13:09:54

+0

這是一個圖像類型。 – ljpv14 2012-07-11 14:02:47