zoukankan      html  css  js  c++  java
  • 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转换为原文件,然后通过文件流将内存中保存的文件数据真实保存到本地​。具体使用方法,读者可自行查阅官方文档,此处不再赘述​。

     这是我公众号二维码

     

  • 相关阅读:
    「SOL」工厂选址(BZOJ)
    「NOTE」数论小札
    Flask实现简单的群聊和单聊
    python基础总结
    基于Flask和百度AI实现与机器人对话
    django创建路径导航
    django中权限控制到按钮级别
    django中非菜单权限的归属
    MongoDB的增删改查
    jQuery于js的区别和联系
  • 原文地址:https://www.cnblogs.com/charlesmvp/p/13338689.html
Copyright © 2011-2022 走看看