2015-06-01 69 views
2

作爲一個例子,我已經轉換canvas元素與重新調整大小的圖像,並張貼成現在編碼爲如何爲Base64字符串轉換爲圖像的二進制文件,並保存到服務器

data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD... 

這是一個隱藏的輸入字段值然後發佈到我需要將此字符串轉換爲圖像並保存到服務器上的同一頁面。

代碼文件的背後(upload.aspx)

protected void btnUpload_Click(object sender, EventArgs e) 
    { 
     HttpPostedFile filePosted = Request.Files["newinput"]; 
     string base64String = filePosted.ToString(); 

      // Convert Base64 String to byte[] 
      byte[] imageBytes = Convert.FromBase64String(base64String); 
      MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length); 

      // Convert byte[] to Image 
      ms.Write(imageBytes, 0, imageBytes.Length); 
      System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true); 

//I DONT KNOW HOW TO WRITE ABOVE INTO THE SaveAs CONDITION BELOW 


     if (filePosted != null && filePosted.ContentLength > 0) 
     { 
      string fileNameApplication = Path.GetFileName(filePosted.FileName); 
      string fileExtensionApplication = Path.GetExtension(fileNameApplication); 

      // generating a random guid for a new file at server for the uploaded file 
      string newFile = Guid.NewGuid().ToString() + fileExtensionApplication; 
      // getting a valid server path to save 
      string filePath = Path.Combine(Server.MapPath("~/Assets/") + Request.QueryString["id"] + "/", newFile); 

      if (fileNameApplication != String.Empty) 
      { 
       filePosted.SaveAs(filePath); 
      } 

     } 

我敢肯定,我需要保存在服務器上之前,這個圖象 - 轉換爲二進制文件,但我不能完全得到我需要怎麼修改上面的代碼。有任何想法嗎?保存到服務器的代碼不起作用。

一旦我將它轉換爲圖像並將其名稱更改爲上述內容 - 我將它通過LINQ存儲回數據庫 - 並附加了一個URL。

任何幫助將不勝感激。

+0

從技術上講,沒有這不是答案,因爲我試過,代碼不起作用,所以我張貼的原因。 – Chris

+0

這裏有任何錯誤/異常? –

+0

我不太明白如何添加 '代碼' File.WriteAllBytes(Path.Combine (@ 「d:\ APPS \ PJP_TEST \ PJPTest \網絡\ ImageStorage \」 ,imgName ) ,imageBytes ) ; – Chris

回答

2

希望低於功能幫助。

public string ImageToBase64(Image image, 
      System.Drawing.Imaging.ImageFormat format) 
     { 
      using (MemoryStream ms = new MemoryStream()) 
      { 
       // Convert Image to byte[] 
       image.Save(ms, format); 
       byte[] imageBytes = ms.ToArray(); 

       // Convert byte[] to Base64 String 
       string base64String = Convert.ToBase64String(imageBytes); 
       return base64String; 
      } 
     } 

     public Image Base64ToImage(string base64String) 
     { 
      // Convert Base64 String to byte[] 
      byte[] imageBytes = Convert.FromBase64String(base64String); 
      MemoryStream ms = new MemoryStream(imageBytes, 0, 
       imageBytes.Length); 

      // Convert byte[] to Image 
      ms.Write(imageBytes, 0, imageBytes.Length); 
      Image image = Image.FromStream(ms, true); 
      return image; 
     } 

編輯1 -

從看來,你所得到的base64字符串的意見,你需要將其保存爲在服務器上的圖像,然後在需要時您需要顯示的圖像使用物理服務器路徑。

好的。 Base64ToImage將爲您的base64字符串提供圖像。您可以使用

image.Save("PATH", System.Drawing.Imaging.ImageFormat.Jpeg); 

保存在服務器上而這個「PATH」你們提供的或創建可存儲在DB作爲URL,你可以在顯示時使用。

注意:確保您有寫入權限的文件夾保存圖像。

EDIT 2 你的函數應該如下。請根據需要添加驗證碼,錯誤處理。

protected void btnUpload_Click(object sender, EventArgs e) 
    { 
     HttpPostedFile filePosted = Request.Files["newinput"]; 
     string base64String = filePosted.ToString(); 

      // Convert Base64 String to byte[] 
      byte[] imageBytes = Convert.FromBase64String(base64String); 
      MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length); 

      // Convert byte[] to Image 
      ms.Write(imageBytes, 0, imageBytes.Length); 
      System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true); 
      string newFile = Guid.NewGuid().ToString() + fileExtensionApplication; 
      string filePath = Path.Combine(Server.MapPath("~/Assets/") + Request.QueryString["id"] + "/", newFile); 
      image.Save(filepath,ImageFormat.Jpeg); 
    } 
+0

謝謝阿米特。我怎麼稱呼它來包含在我的代碼中?現在,我已經傳遞了一個已經從畫布編碼過的圖像,因此我只是想將來自postedFile的數據轉換爲二進制圖像並保存到服務器上。 – Chris

+0

嘗試使用上述功能。它會工作。你不需要刪除數據:image/jpeg; base64 .... – Amit

+0

我只需要使用函數Base64ToImage,因爲我已經有了格式。所以返回圖像的輸出也是文件名呢? – Chris

相關問題