Base64文件上傳(Use C#)


  Base64是網絡上最常見的用於傳輸8Bit字節碼的編碼方式之一,它是一種基於64個可打印字符來表示二進制數據的方法。

    使用base64進行文件上傳的具體流程是:前台使用js將文件轉換為base64格式,后台通過高級編程語言,將base64格式的文件,轉換為原文件。下面就來演示一下,C#語言配合js,如何實現圖片的base64格式上傳與解析保存。

    首先看一下前台是如何將文件讀取到的,請先看如下js代碼:

var DataforUp = "";
  var reader = new FileReader(); //聲明文件讀取對象
//聲明文件讀取完畢后調用的方法,通過this.result獲取到轉換的數據對象
  reader.onload = function () {
      DataforUp = this.result;
  };
//當用戶選擇文件后,進行轉換數據的操作
  $("#file").change(function () {
      reader.readAsDataURL(this.files[0]);
  });
 

    文件的讀取,需要借助於FileReader這個對象,DataforUp用於保存base64源碼。#file該id對應文件選擇標簽。

    FileReader對象有個onload事件,當讀取文件的時候(或者說調用readAsDataURL方法后),會觸發此事件,base64轉換的源碼就存在於它的result屬性中。

    下面具體解釋一下上述代碼:

    當用戶選擇文件后,使用FileReader對象讀取文件,讀取后自動轉換為base64格式,然后觸發該對象的onload方法,將轉換后的base64源碼保存下來。

    這樣我們就拿到了base64格式的文件源碼,通過ajax,就可以將文件發送到后台。

    接下來看一下后台是如何解析並保存的:

public string SaveImgBaseSixFour(string img,string obj)
{
 if(img==null){
   return "數據為空";
 }
  string result = img;
  int index = -1;
 //判斷是不是base64文件類型
  index = img.IndexOf("base64,");
  if (index != -1)
  {
      index += 7;
 //將數據轉換為二進制字節數組
 var imgbit = Convert.FromBase64String(img.Substring(index));
 //生成文件名
 string imgname = DateTime.Now.ToString("yyyyMMddHHmmss") + ".jpg";
 //保存圖片
 using (Image image=Image.FromStream(new MemoryStream(imgbit)))
      {
          image.Save(_rootPath+imgname,ImageFormat.Jpeg);
      }
   }
}
 

    base64源碼的基本模型是 data:image/png;base64,...文件碼...=

    data標識文件類型,緊接着base64,開頭的文件源碼最后以=結束,所以解析的時候要去掉開頭這一部分,本案例圖片擴展名是寫死的,也可以通過base64文件頭去獲取圖片的擴展名,此處不再詳細介紹。

    解析一下代碼流程:

    判斷文件是否為空,然后獲取到真正數據的開始索引,然后調用Convert.FromBase64String方法將base64轉換為原文件,然后通過文件流將內存中保存的文件數據真實保存到本地​。具體使用方法,讀者可自行查閱官方文檔,此處不再贅述​。

 

 這是我公眾號二維碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM